Submission #630991

#TimeUsernameProblemLanguageResultExecution timeMemory
630991ttamxAliens (IOI07_aliens)C++14
50 / 100
2 ms324 KiB
#include<bits/stdc++.h> #define ll long long using namespace std; ll n,xi,yi; map<pair<ll,ll>,bool> mp; bool examine(ll x,ll y){ if(x<=0||y<=0||x>n||y>n)return 0; if(mp.find({x,y})!=mp.end())return mp[{x,y}]; cout << "examine " << x << " " << y << endl; string ret; cin >> ret; return mp[{x,y}]=(ret=="true"); } int main(){ cin.tie(nullptr)->sync_with_stdio(false); cin >> n >> xi >> yi; ll l=xi,r=n; for(ll i=1;xi+i<=n;i*=2){ if(examine(xi+i,yi)){ l=xi+i; }else{ r=xi+i; break; } } while(l+1<r){ ll mid=(l+r+1)/2; if(examine(mid,yi))l=mid; else r=mid-1; } ll xr=l; l=1,r=xi; for(ll i=1;xi-i>0;i*=2){ if(examine(xi-i,yi)){ r=xi-i; }else{ l=xi-i; break; } } while(l+1<r){ ll mid=(l+r)/2; if(examine(mid,yi))r=mid; else l=mid+1; } ll xl=r; ll sz=xr-xl+1; l=yi,r=n; for(ll i=1;yi+i<=n;i*=2){ if(examine(xi,yi+i)){ l=yi+i; }else{ r=yi+i; break; } } while(l+1<r){ ll mid=(l+r+1)/2; if(examine(xi,mid))l=mid; else r=mid-1; } ll yr=l; ll xm=xr-((sz-1)/2); ll ym=yr-((sz-1)/2); ll L=xm-(2*sz),R=xm+(2*sz),T=ym+(2*sz),B=ym-(2*sz); while(examine(L,ym))L-=2*sz; while(examine(R,ym))R+=2*sz; while(examine(xm,B))B-=2*sz; while(examine(xm,T))T+=2*sz; cout << "solution " << (L+R)/2 << " " << (T+B)/2 << endl; }
#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...