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...