답안 #531446

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
531446 2022-02-28T17:18:09 Z AdamGS Aliens (IOI07_aliens) C++17
100 / 100
3 ms 260 KB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(a, b) for(int a = 0; a < (b); ++a)
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(), a.end()
ll n;
bool ask(ll x, ll y) {
  if(1<=x && x<=n && 1<=y && y<=n) {
    cout << "examine " << x << " " << y << endl;
    string s;
    cin >> s;
    return s[0]=='t';
  }
  return false;
}
int main() {
  ll x, y;
  cin >> n >> x >> y;
  ll prawo=1, lewo=1, gora=1, dol=1;
  while(ask(x+prawo, y)) prawo*=2;
  while(ask(x-lewo, y)) lewo*=2;
  while(ask(x, y+gora)) gora*=2;
  while(ask(x, y-dol)) dol*=2;
  ll p=x, k=x+prawo;
  while(p<k) {
    ll sr=(p+k+1)/2;
    if(ask(sr, y)) p=sr; else k=sr-1;
  }
  prawo=p;
  p=x-lewo; k=x;
  while(p<k) {
    ll sr=(p+k)/2;
    if(ask(sr, y)) k=sr; else p=sr+1;
  }
  lewo=p;
  p=y; k=y+gora;
  while(p<k) {
    ll sr=(p+k+1)/2;
    if(ask(x, sr)) p=sr; else k=sr-1;
  }
  gora=p;
  p=y-dol; k=y;
  while(p<k) {
    ll sr=(p+k)/2;
    if(ask(x, sr)) k=sr; else p=sr+1;
  }
  dol=p;
  x=(lewo+prawo)/2;
  y=(gora+dol)/2;
  ll m=prawo-lewo+1, wx, wy;
  if(ask(x-2*m, y)) {
    if(ask(x-4*m, y)) {
      wx=x-2*m;
    } else if(ask(x+2*m, y)) {
      wx=x;
    } else {
      wx=x-m;
    }
  } else {
    if(ask(x+4*m, y)) {
      wx=x+2*m;
    } else {
      wx=x+m;
    }
  }
  if(ask(x, y-2*m)) {
    if(ask(x, y-4*m)) {
      wy=y-2*m;
    } else if(ask(x, y+2*m)) {
      wy=y;
    } else {
      wy=y-m;
    }
  } else {
    if(ask(x, y+4*m)) {
      wy=y+2*m;
    } else {
      wy=y+m;
    }
  }
  cout << "solution " << wx << " " << wy << endl;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 200 KB Output is correct
2 Correct 1 ms 200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 200 KB Output is correct
2 Correct 1 ms 200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 200 KB Output is correct
2 Correct 1 ms 200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 200 KB Output is correct
2 Correct 1 ms 200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 200 KB Output is correct
2 Correct 1 ms 200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 200 KB Output is correct
2 Correct 2 ms 200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 200 KB Output is correct
2 Correct 1 ms 200 KB Output is correct
3 Correct 2 ms 200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 200 KB Output is correct
2 Correct 2 ms 200 KB Output is correct
3 Correct 2 ms 200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 260 KB Output is correct
2 Correct 2 ms 200 KB Output is correct
3 Correct 1 ms 200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 200 KB Output is correct
2 Correct 3 ms 200 KB Output is correct
3 Correct 3 ms 200 KB Output is correct