#include #include #include #include #include #include using namespace std; int ask(int x, int y, int z) { int d; cout << "?" << " " << x << " " << y << " " << z << endl; cin >> d; return d; } int ask(int val, char which) { int d = -99; switch (which) { case 'x': d = ask(val, 0, 0); break; case 'y': d = ask( 0, val, 0); break; case 'z': d = ask( 0, 0, val); break; default: break; } return d; } // 回答クエリ void answer(int x, int y, int z) { cout << "!" << " " << x << " " << y << " " << z << endl; } int calc(char which) { int upper = 150; int mid = 0; int lower = -150; while (upper - lower > 2) { int d_upper = ask(upper, which); int d_lower = ask(lower, which); if (d_upper > d_lower) { upper = mid; mid = (lower + mid) / 2; } else { lower = mid; mid = (mid + upper) / 2; } } int d_upper = ask(upper, which); int d_mid = ask(mid, which); int d_lower = ask(lower, which); int d_min = min({d_lower, d_mid, d_upper}); if (d_min == d_upper) { return upper; } else if (d_min == d_mid) { return mid; } else { return lower; } } int main() { int x = calc('x'); int y = calc('y'); int z = calc('z'); answer(x, y, z); return 0; }