Submission #1313168

#TimeUsernameProblemLanguageResultExecution timeMemory
1313168comgaTramAnhAliens (IOI07_aliens)C++20
100 / 100
1 ms400 KiB
#include <bits/stdc++.h>
using namespace std;
long long n;
bool ask(long long x, long long y) {
  if (x <= 0 || x > n || y <= 0 || y > n) {
    return false;
  }
  cout << "examine " << x << " " << y << endl;
  string s;
  cin >> s;
  return (s == "true");
}
int main() {
  long long x, y;
  cin >> n >> x >> y;
  long long top = 0, right = 0, down = 0, left = 0;
  int mn = 32;
  for (int i = 0; i < mn; i++) {
    if (ask(x, y + (1LL << i)) == false) {
      long long curY = y;
      for (int j = i - 1; j >= 0; j--) {
        if (ask(x, curY + (1LL << j)) == true) {
          curY += (1LL << j);
        }
      }
      top = curY - y;
      break;
    }
  }
  for (int i = 0; i < mn; i++) {
    if (ask(x, y - (1LL << i)) == false) {
      long long curY = y;
      for (int j = i - 1; j >= 0; j--) {
        if (ask(x, curY - (1LL << j)) == true) {
          curY -= (1LL << j);
        }
      }
      down = y - curY;
      break;
    }
  }
  for (int i = 0; i < mn; i++) {
    if (ask(x + (1LL << i), y) == false) {
      long long curX = x;
      for (int j = i - 1; j >= 0; j--) {
        if (ask(curX + (1LL << j), y) == true) {
          curX += (1LL << j);
        }
      }
      right = curX - x;
      break;
    }
  }
  for (int i = 0; i < mn; i++) {
    if (ask(x - (1LL << i), y) == false) {
      long long curX = x;
      for (int j = i - 1; j >= 0; j--) {
        if (ask(curX - (1LL << j), y) == true) {
          curX -= (1LL << j);
        }
      }
      left = x - curX;
      break;
    }
  }
  long long m = left + right + 1;
  for (int i = -2; i <= 2; i++) {
    for (int j = -2; j <= 2; j++) {
      long long curX = x + (long long) i * m;
      long long curY = y + (long long) j * m;

      if ((i + 2) % 2 == (j + 2) % 2) {
        if (ask(curX, curY) == true && ask(curX + 2 * m, curY) == true && ask(curX, curY + 2 * m) == true && ask(curX - 2 * m, curY) == true && ask(curX, curY - 2 * m) == true) {
          cout << "solution " << curX + (right - left) / 2 << " " << curY + (top - down) / 2 << endl;
          return 0;
        }
      }
    }
  }
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...