제출 #78625

#제출 시각아이디문제언어결과실행 시간메모리
78625VardanyanAliens (IOI07_aliens)C++14
80 / 100
1077 ms532 KiB
#include <bits/stdc++.h> using namespace std; bool ask(int x,int y){ cout<<"examine "<<x<<" "<<y<<endl; fflush(stdout); string s; cin>>s; if(s == "true") return true; return false; } int main(){ int n,x0,y0; cin>>n>>x0>>y0; int jmp = 1; int l,r,up,down; while(1){ if(x0+jmp<=n){ if(ask(x0+jmp,y0)){ jmp*=2; continue; } break; } else break; } int x0_right = x0+jmp; int lo = x0; int hi = x0_right; r = x0; while(lo<=hi){ int mid = (lo+hi)/2; if(ask(mid,y0)){ r = mid; lo = mid+1; } else hi = mid-1; } //cout<<r<<endl; //cout<<x0_right<<endl; jmp = 1; while(1){ if(x0-jmp>=1){ if(ask(x0-jmp,y0)){ jmp*=2; continue; } break; } else break; } int x0_left = x0-jmp; lo = x0_left; hi = x0; l = x0; while(lo<=hi){ int mid = (lo+hi)/2; if(ask(mid,y0)){ l = mid; hi = mid-1; } else lo = mid+1; } //cout<<l<<endl; //cout<<x0_left<<endl; jmp = 1; while(1){ if(y0+jmp<=n){ if(ask(x0,y0+jmp)){ jmp*=2; continue; } break; } else break; } int y0_up = y0+jmp; lo = y0; hi = y0_up; up = y0; while(lo<=hi){ int mid = (lo+hi)/2; if(ask(x0,mid)){ up = mid; lo = mid+1; } else hi = mid-1; } //cout<<up<<endl; // cout<<y0_up<<endl; jmp = 1; while(1){ if(y0-jmp>=1){ if(ask(x0,y0-jmp)){ jmp*=2; continue; } break; } else break; } int y0_down = y0-jmp; lo = y0_down; hi = y0; down = y0; while(lo<=hi){ int mid = (lo+hi)/2; if(ask(x0,mid)){ hi = mid-1; down = mid; } else{ lo = mid+1; } } int mx = (l+r)/2; int my = (up+down)/2; int M = r-l+1; // cout<<mx<<" "<<my<<endl; int aj = 0; if(mx+2*M<=n){ if(ask(mx+2*M,my)) aj++;} if(mx+4*M<=n){ if(ask(mx+4*M,my)) aj++;} int dzax = 0; if(mx-2*M>=1){ if(ask(mx-2*M,my)) dzax++;} if(mx-4*M>=1){ if(ask(mx-4*M,my)) dzax++;} int rig = mx+2*aj*M; int lif = mx-2*dzax*M; int ansx = (lif+rig)/2; int verev = 0; if(my+2*M<=n){ if(ask(mx,my+2*M)) verev++;} if(my+4*M<=n){ if(ask(mx,my+4*M)) verev++;} int nerq = 0; if(my-2*M>=1){ if(ask(mx,my-2*M)) nerq++;} if(my-4*M>=1){ if(ask(mx,my-4*M)) nerq++;} int u = my+2*verev*M; int dow = my-2*nerq*M; int ansy = (u+dow)/2; cout<<"solution "<<ansx<<" "<<ansy<<endl; fflush(stdout); 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...