제출 #1188432

#제출 시각아이디문제언어결과실행 시간메모리
1188432North1304Aliens (IOI07_aliens)C++20
100 / 100
1 ms432 KiB
#include <bits/extc++.h> using namespace std; typedef long long ll; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); ll n,x0,y0; if(!(cin>>n>>x0>>y0)) return 0; auto ask=[&](ll x,ll y){ cout<<"examine "<<x<<' '<<y<<endl; cout.flush(); string s; cin>>s; return s[0]=='t'; }; ll y=y0,l=x0,step=1; while(true){ ll nx=l-step; if(nx<1) break; if(ask(nx,y)) l=nx,step<<=1; else break; } ll lo=max(1LL,l-step),hi=l; while(lo<hi){ ll mid=(lo+hi)/2; if(ask(mid,y)) hi=mid; else lo=mid+1; } ll left=hi; ll r=x0;step=1; while(true){ ll nx=r+step; if(nx>n) break; if(ask(nx,y)) r=nx,step<<=1; else break; } ll hf=min(n,r+step);lo=r; while(lo<hf){ ll mid=(lo+hf+1)/2; if(ask(mid,y)) lo=mid; else hf=mid-1; } ll right=lo,m=right-left+1,x=x0,b=y0;step=1; while(true){ ll ny=b-step; if(ny<1) break; if(ask(x,ny)) b=ny,step<<=1; else break; } lo=max(1LL,b-step);hi=b; while(lo<hi){ ll mid=(lo+hi)/2; if(ask(x,mid)) hi=mid; else lo=mid+1; } ll bottom=hi,t=y0;step=1; while(true){ ll ny=t+step; if(ny>n) break; if(ask(x,ny)) t=ny,step<<=1; else break; } hf=min(n,t+step);lo=t; while(lo<hf){ ll mid=(lo+hf+1)/2; if(ask(x,mid)) lo=mid; else hf=mid-1; } ll top=lo,cx0=(left+right)/2,cy0=(bottom+top)/2; vector<pair<ll,ll>> d={{m,m},{m,-m},{-m,m},{-m,-m}}; unordered_set<unsigned long long> vis; queue<pair<ll,ll>> q; auto enc=[&](ll x,ll y){return (unsigned long long)x<<32|y;}; q.emplace(cx0,cy0); vis.insert(enc(cx0,cy0)); ll mnx=cx0,mxx=cx0,mny=cy0,mxy=cy0; while(!q.empty()){ auto [cx,cy]=q.front();q.pop(); for(auto [dx,dy]:d){ ll nx=cx+dx,ny=cy+dy; if(nx<1||nx>n||ny<1||ny>n) continue; auto code=enc(nx,ny); if(vis.count(code)) continue; if(ask(nx,ny)){ vis.insert(code); q.emplace(nx,ny); mnx=min(mnx,nx); mxx=max(mxx,nx); mny=min(mny,ny); mxy=max(mxy,ny); } } } ll xc=(mnx+mxx)/2,yc=(mny+mxy)/2; cout<<"solution "<<xc<<' '<<yc<<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...