#include<bits/stdc++.h>
using namespace std;
const int MAX = 1e6 + 15;
int n, x, y, m, numblock;
bool query(int x, int y){
cout << "examine " << x << ' ' << y << '\n'; cout.flush();
string ans; cin >> ans; return (ans == "true");
}
bool check(int x){ return x > 0 && x < n ;}
int main(){
cin >> n >> x >> y;
int up = y, down = y;
while(check(up + 1) && query(x, up + 1)) up++;
while(check(down - 1) && query(x, down - 1)) down--;
m = up - down + 1;
while(x - 1 > 0 && query(x - 1, up)) x--;
int l = 0, r = 3 * n / m, curx = x, cury = up, jump = 0;
//Pula diagonal
while(l <= r){
int mid = (l + r) >> 1;
int nx = curx + m * mid, ny = cury + m * mid;
if(!check(nx) || !check(ny)){ r = mid - 1; continue; }
if(query(nx, ny)) l = mid + 1, jump = mid;
else r = mid - 1;
}
curx += jump * m;
cury += jump * m;
//cerr << curx << ' ' << cury << '\n';
l = 0, r = ((n + m - 1)/ m), jump = 0;
//Pula cima
while(l <= r){
int mid = (l + r) >> 1;
int ny = cury + m * (2 * mid);
if(!check(ny)) { r = mid - 1; continue; }
if(query(curx, ny)) l = mid + 1, jump = 2 * mid;
else r = mid - 1;
}
cury += jump * m;
//Pula esquerda
l = 0, r = ((n + m - 1)/ m), jump = 0;
while(l <= r){
int mid = (l + r) >> 1;
int nx = curx - m * (2 * mid);
if(!check(nx)){ r = mid - 1; continue; }
if(query(nx, cury)) l = mid + 1, jump = 2 * mid;
else r = mid - 1;
}
curx -= jump * m;
//move to center of current block
curx += (m - 1) / 2;
cury -= (m - 1) / 2;
//move to center block
l = 0, r = ((n + m - 1) / m), jump = 0;
while(l <= r){
int mid = (l + r) >> 1;
int nx = curx + m * (2 * mid);
if(!check(nx)){ r = mid - 1; continue; }
if(query(nx, cury)) l = mid + 1, jump = 2 * mid;
else r = mid - 1;
}
numblock = jump + 1;
curx += ((numblock - 1) / 2) * m;
cury -= ((numblock - 1) / 2) * m;
cout << "solution " << curx << ' ' << cury << '\n';
cout.flush();
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
1 ms |
208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
208 KB |
Incorrect |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
2 ms |
208 KB |
Incorrect |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
2 ms |
208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
4 ms |
296 KB |
Execution killed with signal 13 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
208 KB |
Output is correct |
2 |
Runtime error |
5 ms |
208 KB |
Execution killed with signal 13 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
208 KB |
Output is correct |
2 |
Runtime error |
1 ms |
300 KB |
Execution killed with signal 13 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
3 ms |
208 KB |
Execution killed with signal 13 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
3 ms |
208 KB |
Execution killed with signal 13 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
3 ms |
208 KB |
Execution killed with signal 13 |
2 |
Halted |
0 ms |
0 KB |
- |