Submission #90198

#TimeUsernameProblemLanguageResultExecution timeMemory
90198asifthegreatAliens (IOI07_aliens)C++14
0 / 100
2 ms588 KiB
#include <bits/stdc++.h> using namespace std; int n,m; bool check(int xx, int yy) { if (0 >= xx || xx > n) return false; if (yy <= 0 || yy > n) return false; //numq++; //if (numq > 300) { // cout << "solution " << 1 << " " << 1 << endl; // assert(false); // } cout << "examine " << xx << " " << yy << endl; cout.flush(); string ans; cin >> ans; return ans == "true"; } int main() { //int n,m; cin >> n >> m; int x,y; cin >> x >> y; int lo = y,hi = y+m; int dan = -1,bam=-1,upore=-1,niche=-1; while(hi > lo){ int mid=(lo+hi)/2; if(check(x,mid)){ dan = max(dan,mid); lo = mid+1; } else hi = mid-1; } /*for(int mid = lo;mid <= hi;mid++){ if(check(x,mid)){ dan = max(dan,mid); } }*/ if(dan+m*4 <= n and check(x,dan+m*4)){ dan = dan+m*4; } else if(dan + m* 2 <= n and check(x,dan+m*2))dan = dan+m*2; lo = max(1,y-m); hi = y; bam = y; while(hi>lo){ int mid=(lo+hi)/2; if(check(x,mid)){ bam = min(bam,mid); hi = mid-1; } else lo = mid+1; } /*for(int mid = lo;mid <= hi;mid++){ if(check(x,mid)){ bam = min(bam,mid); } }*/ if(bam-m*4 > 0 and check(x,bam-m*4)){ bam -= m*4; } else if(bam-m*2 > 0 and check(x,bam-m*2)){ bam -= m*2; } hi = x; lo = max(1,x-m); upore = x; while(hi>lo){ int mid=(lo+hi)/2; if(check(mid,y)){ upore = min(upore,mid); hi = mid-1; } else lo = mid+1; } /*for(int mid = lo;mid <= hi;mid++){ if(check(mid,y)){ upore = min(upore,mid); } }*/ if(upore-m*4 > 0 and check(upore-m*4,y)){ upore -= m*4; } else if(upore-m*2 > 0 and check(upore-m*2,y)){ upore -= m*2; } niche = x; lo = x; hi = x+m; while(hi>lo){ int mid=(lo+hi)/2; if(check(mid,y)){ niche = max(niche,mid); lo = mid+1; } else hi = mid-1; } /*for(int mid = lo;mid <= hi;mid++){ if(check(mid,y)){ niche = max(niche,mid); } }*/ if(niche+m*4 <= n and check(niche+m*4,y)){ niche = niche+m*4; } else if(niche + m* 2 <= n and check(niche+m*2,y))niche = niche+m*2; x = (niche-upore)/2 + m; y = (dan-bam)/2 + m; cout << "solution " << x << " " << y << endl; cout.flush(); 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...