Submission #837406

#TimeUsernameProblemLanguageResultExecution timeMemory
8374061075508020060209tcWorm Worries (BOI18_worm)C++14
10 / 100
3 ms208 KiB
#include <bits/stdc++.h>
using namespace std;
//#define int long long
int n;int m;int K;int Q;
map<pair<int,pair<int,int>>,int>mp;
int ask(int x,int y,int z){
if(x==0){return 0;}
if(x==n+1){return 0;}
if(mp[{x,{y,z}}]){return mp[{x,{y,z}}];}
cout<<"? "<<x<<" "<<y<<" "<<z<<endl;
int ret;
cin>>ret;
mp[{x,{y,z}}]=ret;
return ret;
}
void ot(int x,int y,int z){
cout<<"! "<<x<<" "<<y<<" "<<z<<endl;
exit(0);
}

void chk(int x){
int a;int b;int c;
a=ask(x-1,1,1);
b=ask(x,1,1);
c=ask(x+1,1,1);
if(b>=a&&b>=c){
    ot(x,1,1);
}
}

int ok(int pl){
if(ask(pl,1,1)>=ask(pl-1,1,1)){return 0;}
return 1;
}

signed main(){
cin>>n>>m>>K>>Q;
//int l=1;int r=n;

int a;int b;int c;int d;
a=ask(1,1,1);
b=ask(2,1,1);
c=ask(n-1,1,1);
d=ask(n,1,1);
if(a>=b){ot(1,1,1);}
if(d>=c){ot(n,1,1);}
int l=2;int r=n;
while(l<r){
    int mi=l+(r-l)/2;
    if(ok(mi)){
        r=mi;
    }else{
        l=mi+1;
    }

}
for(int i=l-2;i<=l+2;i++){
    if(i<=0||i>n){continue;}
    chk(i);
}

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