#include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef vector vi; typedef pair ii; typedef vector< ii > vii; ///////////////////////////////UTIL///////////////////////////////// #define ALL(x) (x).begin(),x.end() #define CLEAR0(v) memset(v, 0, sizeof(v)) #define CLEAR(v, x) memset(v, x, sizeof(v)) #define COPY(a, b) memcpy(a, b, sizeof(a)) #define CMP(a, b) memcmp(a, b, sizeof(a)) #define REP(i,n) for(int i = 0; i-1; i--) #define REPDP(i,a,n) for(int i = n-1; i>=a; i--) int n = 200, last = -10000; bool ver[210][210]; int mem[210][210]; int x = 0, y = 0; bool lineQuery = false, colQuery = false; int hi = 0, lo = 0, mid, ans; int MXCOL = 200, MXLINE = 200; void resetBB(int LO, int HI){ hi = ans = HI; lo = LO; } int query(int X, int Y){ if(!ver[X][Y]){ cout << X << " " << Y << endl; cout.flush(); cin >> mem[X][Y]; } return mem[X][Y]; } int main(){ CLEAR0(ver); while(last != 0){ if(hi-lo > 1){ mid = (hi+lo)/2; //cout << " HI " << hi << " LO " << lo << " MID " << mid << " ANS " << " MXLINE " << MXLINE << " MXCOL " << MXCOL << " ANS " << ans << endl; if(colQuery) last = query(mid, y); else if(lineQuery) last = query(x, mid); if(last > 0){ hi = mid; ans = mid; } else if(last < 0){ lo = mid; } } else{ if(!lineQuery){ resetBB(y, MXCOL); lineQuery = true; } else if(!colQuery){ MXCOL = ans; resetBB(x, MXLINE); colQuery = true; } else{ MXLINE = ans; lineQuery = colQuery = false; x++; y++; } } } }