#include <bits/stdc++.h>
using namespace std;
// macros
typedef long long ll;
typedef long double ld;
typedef pair<int, int> ii;
typedef pair<ll, ll> lll;
typedef tuple<int, int, int> iii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<iii> viii;
typedef vector<ll> vll;
typedef vector<lll> vlll;
#define REP(a,b,c) for(int a=int(b); a<int(c); a++)
#define RE(a,c) REP(a,0,c)
#define RE1(a,c) REP(a,1,c+1)
#define REI(a,b,c) REP(a,b,c+1)
#define REV(a,b,c) for(int a=int(c-1); a>=int(b); a--)
#define FOR(a,b) for(auto& a : b)
#define all(a) a.begin(), a.end()
#define INF 1e18
#define EPS 1e-9
#define pb push_back
#define popb pop_back
#define fi first
#define se second
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
// input
template<class T> void IN(T& x) {cin >> x;}
template<class H, class... T> void IN(H& h, T&... t) {IN(h); IN(t...); }
// output
template<class T1, class T2> void OUT(const pair<T1,T2>& x);
template<class T> void OUT(const vector<T>& x);
template<class T> void OUT(const T& x) {cout << x;}
template<class H, class... T> void OUT(const H& h, const T&... t) {OUT(h); OUT(t...); }
template<class T1, class T2> void OUT(const pair<T1,T2>& x) {OUT(x.fi,' ',x.se);}
template<class T> void OUT(const vector<T>& x) {RE(i,x.size()) OUT(i==0?"":" ",x[i]);}
template<class... T> void OUTL(const T&... t) {OUT(t..., "\n"); }
template<class H> void OUTLS(const H& h) {OUTL(h); }
template<class H, class... T> void OUTLS(const H& h, const T&... t) {OUT(h,' '); OUTLS(t...); }
// dp
template<class T> bool ckmin(T&a, T&b) { bool bl = a > b; a = min(a,b); return bl;}
template<class T> bool ckmax(T&a, T&b) { bool bl = a < b; a = max(a,b); return bl;}
void program();
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
program();
}
//===================//
// begin program //
//===================//
const int MX = 200;
const int N = (1<<20);
ll n, m;
ll X0, Y0;
char a[MX][MX];
bool query(ll x, ll y) {
if(x > n || y > n || x <= 0 || y <= 0) return 0;
#ifdef DEBUG
return a[y-1][x-1]=='1';
#endif
OUTLS("examine",x,y);
cout.flush();
string res; IN(res);
return res == "true";
}
void answer(ll x, ll y) {
OUTLS("solution",x,y);
cout.flush();
}
void goLeft() {
REV(i,0,31) while(query(X0-(1ll<<i), Y0)) X0 -= (1ll<<i);
}
void goRight() {
REV(i,0,31) while(query(X0+(1ll<<i), Y0)) X0 += (1ll<<i);
}
void goUp() {
REV(i,0,31) while(query(X0, Y0-(1ll<<i))) Y0 -= (1ll<<i);
}
void goDown() {
REV(i,0,31) while(query(X0, Y0+(1ll<<i))) Y0 += (1ll<<i);
}
bool checkM(int m) {
RE(i,5) RE(j,5) {
if((i+j)%2) continue;
if(!query(X0+i*m,Y0+j*m)) return false;
}
return true;
}
void program() {
IN(n,X0,Y0);
#ifdef DEBUG
RE(i,n) RE(j,n) IN(a[i][j]);
#endif
goLeft();
goUp();
// we are currently in a top left cell
int tlX=X0, tlY=Y0;
goRight();
vll possibleM;
possibleM.pb((X0-tlX+1)/1);
possibleM.pb((X0-tlX+1)/3);
possibleM.pb((X0-tlX+1)/5);
goLeft();
FOR(m,possibleM) {
goUp();
goLeft();
while(query(X0-m, Y0-m)) X0-=m, Y0-=m;
while(query(X0-m*2, Y0)) X0-=m*2;
while(query(X0, Y0-m*2)) Y0-=m*2;
}
// we are now at THE top left cell
FOR(m,possibleM) if(checkM(m)) {
// we found the value of m
answer(X0 + 2*m + m/2,Y0 + 2*m + m/2);
return;
}
OUTL("No solution");
}
Compilation message
aliens.cpp: In function 'void program()':
aliens.cpp:112:17: warning: unused variable 'tlY' [-Wunused-variable]
112 | int tlX=X0, tlY=Y0;
| ^~~
# |
결과 |
실행 시간 |
메모리 |
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 |
2 ms |
200 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
200 KB |
Output is correct |
2 |
Correct |
3 ms |
200 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
200 KB |
Output is correct |
2 |
Runtime error |
4 ms |
200 KB |
Execution killed with signal 13 |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
200 KB |
Output is correct |
2 |
Correct |
3 ms |
256 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
200 KB |
Output is correct |
2 |
Runtime error |
4 ms |
256 KB |
Execution killed with signal 13 |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
200 KB |
Output is correct |
2 |
Correct |
4 ms |
204 KB |
Output is correct |
3 |
Correct |
2 ms |
200 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
244 KB |
Output is correct |
2 |
Runtime error |
5 ms |
200 KB |
Execution killed with signal 13 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
200 KB |
Output is correct |
2 |
Runtime error |
4 ms |
200 KB |
Execution killed with signal 13 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
200 KB |
Output is correct |
2 |
Runtime error |
4 ms |
200 KB |
Execution killed with signal 13 |
3 |
Halted |
0 ms |
0 KB |
- |