제출 #616076

#제출 시각아이디문제언어결과실행 시간메모리
616076ApiramAliens (IOI07_aliens)C++14
10 / 100
2 ms464 KiB
#include<bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); long long n,x,y;cin>>n>>x>>y; --x,--y; auto examine = [&](long long xx,long long yy){ if (xx + 1 > n || yy + 1 > n || xx + 1<=0 || yy + 1<=0)return false; cout<<"examine "<<xx + 1<<" "<<yy + 1<<endl; string s;cin>>s; return s == "true"; }; auto answer = [&](long long xx,long long yy){ assert(xx + 1 <=n && yy + 1 <=n && xx + 1 > 0 && yy + 1 > 0); cout<<"solution "<<xx + 1<<" "<<yy + 1<<endl; }; long long st = 30; while (true){ long long pos = -1; for (long long i = st;i>=0;--i){ if (examine(x - (1LL<<i),y)){ pos = i; st = i; break; } } if (pos == -1)break; x-=(1LL<<pos); } st = 30; long long m = 0; while (true){ long long pos = -1; for (long long i = st;i>=0;--i){ if (examine(x + (1LL<<i) + m,y)){ pos = i; st = i; break; } } if (pos == -1)break; m+=(1LL<<pos); } st = 30; while (true){ long long pos = -1; for (long long i = st;i>=0;--i){ if (examine(x,y - (1LL<<i))){ pos = i; st = i; break; } } if (pos == -1)break; y-=(1LL<<pos); } //cout<<x<<" "<<y<<" "<<m<<'\n'; long long levelx = 0; if (examine(x + 4 * (m + 1) + m,y)){ levelx = 1; } else if (examine(x + 2 * (m + 1) + m,y)){ levelx = 2; } else levelx = 3; long long levely = 0; if (examine(x,y + 4 * (m + 1) + m)){ levely = 1; } else if (examine(x,y + 2 * (m + 1) + m)){ levely = 2; } else levely = 3; if (levelx == 1 && levely == 1){ answer(x + (m + 1) + m + (m + 2)/2, y + (m + 1) + m + (m + 2)/2); } else if (levelx == 1 && levely == 2){ answer(x + (m + 1) + m + (m + 2)/2, y + (m + 1)/2); } else if (levelx == 1 && levely == 3){ x+=m; answer(x + (m + 1) + (m + 2)/2,y - (m + 1) - (m + 2)/2); } else if (levelx == 2 && levely == 1){ x+=(m + 1)/2; answer(x,y + (m + 1) + m + (m + 2)/2); } else if (levelx == 2 && levely == 2){ if (examine(x + m + 3 * (m + 1),y + m + 3 * (m + 1))){ answer(x + m + (m + 2)/2,y + m + (m + 2)/2); } else{ answer(x + (m + 1)/2,y + (m + 1)/2); } } else if (levelx == 2 && levely == 3){ if (examine(x - (m + 1),y)){ x+=(m + 1)/2; answer(x,y - (m + 1) - (m + 2)/2); } else{ x+=m; answer(x + (m + 2)/2,y - (m + 2)/2); } } else if (levelx == 3 && levely == 1){ y+=m; answer(x - (m + 1) - (m + 2)/2,y + (m + 1) + (m + 2)/2); } else if (levelx == 3 && levely == 2){ if (examine(x - 4 * (m + 1),y)){ y +=(m + 1)/2; answer(x - (m + 1) - (m + 2)/2,y); } else{ y+=m; answer(x - (m + 2)/2 , y + (m + 2)/2); } } else if (levelx == 3 && levely == 3){ if (examine(x,y - 4 * (m + 1))){ answer(x - (m + 1) - (m + 2)/2,y - (m + 1) - (m + 2)/2); } else{ answer(x - (m + 2)/2,y - (m + 2)/2); } } 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...