#include <bits/stdc++.h>
using namespace std;
template<class C>constexpr int len(const C&c){return int(c.size());}
const int DDX[13] = {-2, 0, 2, -1, 1, -2, 0, 2, -1, 1, -2, 0, 2};
const int DDY[13] = {-2, -2, -2, -1, -1, 0, 0, 0, 1, 1, 2, 2, 2};
long long N;
bool rng(long long X){
return 1 <= X && X <= N;
}
map<pair<long long, long long>, bool> memo;
bool query(long long X, long long Y){
if(!rng(X) || !rng(Y)) return false;
if(memo.count(make_pair(X, Y))) return memo[make_pair(X, Y)];
assert(memo.size() < 300);
cout << "examine " << X << " " << Y << endl;
string s; cin >> s;
return memo[make_pair(X, Y)] = (s == "true");
}
int main(){
cin.sync_with_stdio(0); cin.tie(0); cout.tie(0);
//freopen("paintbarn.in", "r", stdin);
//freopen("paintbarn.out", "w", stdout);
long long XS, YS, X1, Y1, X2, SZ, XC, YC; cin >> N >> XS >> YS;
// find offset from center of current square
X1 = XS; Y1 = YS;
while(true){
long long i = 1;
for(;;i+=i){
if(!query(X1 + i, Y1)){
X1 += i / 2LL; break;
}
}
long long L = X1, R = X1 + i / 2LL, MID;
while(R - L > 1){
MID = L + (R - L) / 2;
if(query(MID, Y1)) L = MID;
else R = MID;
}
X1 = L;
if(!query(X1 + 1, Y1)) break;
}
X2 = XS;
while(true){
long long i = 1;
for(;; i += i){
if(!query(X2 - i, Y1)){
X2 -= i / 2LL; break;
}
}
long long L = X2 - i / 2LL, R = X2, MID;
while(R - L > 1){
MID = L + (R - L) / 2;
if(query(MID, Y1)) R = MID;
else L = MID;
}
X2 = R;
if(!query(X2 - 1, Y1)) break;
}
// stupid
SZ = X1 - X2 + 1; XC = (X1 + X2) / 2;
while(true){
long long i = 1;
for(;; i += i){
if(!query(XC, Y1 - i)){
Y1 -= i / 2LL; break;
}
}
long long L = Y1 - i / 2LL, R = Y1, MID;
while(R - L > 1){
MID = L + (R - L) / 2;
if(query(XC, MID)) R = MID;
else L = MID;
}
X2 = R;
if(!query(XC, Y1 - 1)) break;
}
YC = Y1 + SZ / 2;
// +41 queries
for(int i = 0; i < 13; ++i){
X1 = XC + SZ * DDX[i];
Y1 = YC + SZ * DDY[i];
if(!rng(X1) || !rng(Y1)) continue;
int cnt = 0;
for(int j = 0; j < 13; ++j){
XS = X1 + SZ * DDX[j];
YS = Y1 + SZ * DDY[j];
if(rng(XS) && rng(YS) && query(XS, YS)) ++cnt;
else break;
}
if(cnt == 13){
cout << "solution " << X1 << " " << Y1 << endl;
memo.clear();
return 0;
}
}
memo.clear();
assert(false);
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
3 ms |
392 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
1 ms |
396 KB |
Output is correct |
3 |
Correct |
2 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
3 |
Correct |
3 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
3 ms |
512 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Output is correct |
2 |
Correct |
2 ms |
384 KB |
Output is correct |
3 |
Runtime error |
4 ms |
512 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |