Submission #1162146

#TimeUsernameProblemLanguageResultExecution timeMemory
1162146cnn008Aliens (IOI07_aliens)C++20
0 / 100
1 ms444 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int n,X0,Y0,_x,_y,cnt; signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin>>n>>X0>>Y0; auto ask = [&](int x, int y)->bool{ cnt++; assert(cnt<=300); cout<<"examine "<<x<<" "<<y<<endl; string s; cin>>s; if(s[0]=='t') return 1; return 0; }; int l1,r1,l2,r2; _x=X0,_y=Y0; for(int i=1; ; i*=2){ int y=min(n,_y+i); if(!ask(X0,y)){ int l=_y,r=y-1; while(l<=r){ int mid=(l+r)>>1; if(ask(X0,mid)){ r2=mid; l=mid+1; }else r=mid-1; } break; }else{ if(y==n){ r2=n; break; } _y+=i; } } _x=X0,_y=Y0; for(int i=1; ; i*=2){ int x=min(n,_x+i); if(!ask(x,Y0)){ int l=_x,r=x-1; while(l<=r){ int mid=(l+r)>>1; if(ask(mid,Y0)){ l2=mid; l=mid+1; }else r=mid-1; } break; }else{ if(x==n){ l2=n; break; } _x+=i; } } _x=X0,_y=Y0; for(int i=1; ; i*=2){ int y=max(1ll,_y-i); if(!ask(X0,y)){ int r=_y,l=y+1; while(l<=r){ int mid=(l+r)>>1; if(ask(X0,mid)){ r1=mid; r=mid-1; }else l=mid+1; } break; }else{ if(y==1){ r1=1; break; } _y-=i; } } _x=X0,_y=Y0; for(int i=1; ; i*=2){ int x=max(1ll,_x-i); if(!ask(x,Y0)){ int r=_x,l=x+1; while(l<=r){ int mid=(l+r)>>1; if(ask(mid,Y0)){ l1=mid; r=mid-1; }else l=mid+1; } break; }else{ if(x==1){ l1=1; break; } _x-=i; } } int m=r2-r1+1,cur=0; assert(m&1); int l=1,r=50000; auto check = [&](int x, int y)->bool{ if(x<=0 || y<=0) return 0; return ask(x,y); }; // while(l<=r){ // int mid=(l+r)>>1; // if(check(l1-mid*m,r1-mid*m)){ // cur=mid; // l=mid+1; // }else r=mid-1; // } // r1-=m*cur; // l1-=m*cur; // cur=0; // l=1,r=50000; // while(l<=r){ // int mid=(l+r)>>1; // if(check(l1-2*mid*m,r1)){ // cur=mid; // l=mid+1; // }else r=mid-1; // } // l1-=2*cur*m; // cur=0; // l=1,r=50000; // while(l<=r){ // int mid=(l+r)>>1; // if(check(l1,r1-2*mid*m)){ // cur=mid; // l=mid+1; // }else r=mid-1; // } // r1-=2*cur*m; assert(ask(l1,r1)); while(check(l1-m-m,r1)) l1-=m+m; while(check(l1,r1-m-m)) r1-=m+m; while(check(l1-m,r1-m)) l1-=m,r1-=m; assert(ask(l1,r1)); l1+=(m-1)*m; r1+=(m-1)*m; l1+=m/2; r1+=m/2; assert(ask(l1,r1)); int v=(m-1)*m+m/2; assert(ask(l1-v,r1-v)); return 0; assert(ask(l1+v,r1-v)); assert(ask(l1-v,r1+v)); assert(ask(l1+v,r1+v)); cout<<"solution "<<l1<<" "<<r1<<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...