Submission #808858

#TimeUsernameProblemLanguageResultExecution timeMemory
808858LiudasAliens (IOI07_aliens)C++17
100 / 100
3 ms208 KiB
#include <iostream> using namespace std; int main() { long long N, x, y; cin >> N >> x >> y; long long u = 0, l = 0, r = 0, d = 0; long long ar = 1, al = 1, au = 1, ad = 1; bool flat = true; while(ar && x + r + ar <= N){ cout << "examine " << x + r + ar << " " << y << endl; string ans; cin >> ans; if(ans != "true"){ flat = false; ar /= 2; } else if(flat){ ar *= 2; } else{ r += ar; } while(x + r + ar > N){ flat = false; ar/=2; } } flat = true; while(al && x - l - al >= 1){ cout << "examine " << x - l - al << " " << y << endl; string ans; cin >> ans; if(ans != "true"){ flat = false; al/=2; } else if(flat){ al *= 2; } else{ l+= al; } while(x - l - al < 1){ flat = false; al/=2; } } flat = true; while(au && y + u + au <= N){ cout << "examine " << x << " " << y + u + au << endl; string ans; cin >> ans; if(ans != "true"){ flat = false; au /= 2; } else if(flat){ au *= 2; } else{ u += au; } while(y + u + au > N){ flat = false; au/=2; } } flat = true; while(ad && y - d - ad >= 1){ cout << "examine " << x << " " << y - d - ad << endl; string ans; cin >> ans; if(ans != "true"){ flat = false; ad /= 2; } else if(flat){ ad *= 2; } else{ d += ad; } while(y - d - ad < 1){ flat = false; ad/=2; } } long long midx = (2 * x + r - l) / 2, midy = (2 * y + u - d) / 2; long long s = r + l + 1; long long cl = 0, cr = 0, cu = 0, cd = 0; flat = true; while(flat && midx + 2 * s * (cr + 1) <= N){ cout << "examine " << midx + 2 * s * (cr + 1) << " " << midy << endl; string ans; cin >> ans; if(ans != "true"){ flat = false; } else{ cr++ ; } } flat = true; while(flat && midx - 2 * s * (cl + 1) >= 1){ cout << "examine " << midx - 2 * s * (cl + 1) << " " << midy << endl; string ans; cin >> ans; if(ans != "true"){ flat = false; } else{ cl++ ; } } flat = true; while(flat && midy + 2 * s * (cu + 1) <= N){ cout << "examine " << midx << " " << midy + 2 * s * (cu + 1) << endl; string ans; cin >> ans; if(ans != "true"){ flat = false; } else{ cu++ ; } } flat = true; while(flat && midy - 2 * s * (cd + 1) >= 1){ cout << "examine " << midx << " " << midy - 2 * s * (cd + 1) << endl; string ans; cin >> ans; if(ans != "true"){ flat = false; } else{ cd++; } } if(cl + cr == 2){ cout << "solution "; if(cl == cr){ cout << midx << " "; } if(cl == 0){ cout << midx + s * 2 << " "; } if(cl == 2){ cout << midx - s * 2 << " "; } if(cu == cd){ cout << midy << " "; } if(cd == 0){ cout << midy + s * 2 << " "; } if(cd == 2){ cout << midy - s * 2 << " "; } cout << endl; } else{ cout << "solution "; if(cl == 0){ cout << midx + s << " "; } if(cl == 1){ cout << midx - s << " "; } if(cd == 0){ cout << midy + s << " "; } if(cd == 1){ cout << midy - s << " "; } cout << endl; } 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...