/*************************************************** * Alex Palcuie * Romania - 2016 * alex [dot] palcuie [at] gmail [dot] com * http://blog.palcu.ro/ ****************************************************/ #include <algorithm> #include <bitset> #include <climits> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <deque> #include <fstream> #include <iostream> #include <iterator> #include <limits> #include <list> #include <map> #include <queue> #include <set> #include <sstream> #include <stack> #include <string> #include <unordered_map> #include <unordered_set> #include <utility> #include <vector> using namespace std; const int N = 4; const int INF = 0x3f3f3f3f; int m[N][N]; void get(int x, int y) { if (m[x][y]) return; else { cout << x << " " << y << "\n"; cout.flush(); cin >> m[x][y]; if (m[x][y] == 0) exit(0); } } int main() { int x1=0, x2=N-1; int y1=0, y2=N-1; int mid; while (true) { mid = (x1 + x2) / 2; get(0, mid); get(0, mid-1); if (m[0][mid-1] < 0 && m[0][mid] > 0) { mid = mid-1; break; } get(0, mid+1); if (m[0][mid+1] > 0 && m[0][mid] < 0) { break; } if (m[0][mid] > 0) { x2 = mid - 1; } else { x1 = mid + 1; } } while (true) { int ymid = (y1 + y2) / 2; get(ymid, mid); get(ymid+1, mid); get(ymid-1, mid); if (m[ymid][mid] > 0) { y2 = ymid-1; } else { y1 = mid+1; } } return 0; }