/* -*- coding: utf-8 -*- * * 3212.cc: No.3212 SUPER Guess the Number - yukicoder */ #include #include #include using namespace std; /* constant */ const int MIN_A = 1; const int MAX_A = 1000000; const int MIN_X = -1000000000; const int MAX_X = 1000000000; /* typedef */ /* global variables */ /* subroutines */ int query(int a, bool rf = true) { printf("? %d\n", a); fflush(stdout); if (rf) { int r; scanf("%d", &r); if (r < 0) exit(0); return r; } return 0; } /* main */ int main() { int px = MIN_A, p = 0; query(px, false); int a0 = MIN_A, a1 = MAX_A; while (a0 < a1) { if (p == 0) { // px = left side int a = (a0 + a1 + 1) / 2; int xi = a * 2 - px; if (query(xi)) a0 = a; // ans-px>=xi-ans else a1 = a; px = xi, p = 1; } else { // px = right side int a = (a0 + a1) / 2; int xi = a * 2 - px; if (query(xi)) a1 = a; else a0 = a; px = xi, p = 0; } } printf("! %d\n", a0); fflush(stdout); for (int i = 0; i < 1e9; i++); return 0; }