# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
244380 | TadijaSebez | Worm Worries (BOI18_worm) | C++11 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
map<array<int,3>,int> was;
int n,m,k,q;
int Ask(int i,int j,int k){
if(was.count({i,j,k}))return was[{i,j,k}];
if(i<1||j<1||k<1||i>n||j>m||k>::k)return 0;
printf("? %i %i %i\n",i,j,k);
fflush(stdout);
int b;scanf("%i",&b);
was[{i,j,k}]=b;
return b;
}
void Ans(int i,int j,int k){
printf("! %i %i %i\n",i,j,k);
fflush(stdout);
exit(0);
}
int main(){
scanf("%i %i %i %i",&n,&m,&k,&q);
if(m==1&&k==1){
int top=n,bot=1,mid;
while(top>bot){
mid=top+bot>>1;
if(Ask(mid,1,1)<Ask(mid+1,1,1))bot=mid+1;
else top=mid;
}
Asn(bot,1,1);
}else if(k==1){
/*int X1=1,X2=n,Y1=1,Y2=n;
while(X1<X2&&Y1<Y2){
int Xm=X1+X2>>1;
int mx=0,pos=0;
for(int i=Y1;i<=Y2;i++){
int now=Ask(Xm,i,1);
if(now>mx)mx=now,pos=i;
}
if(Ask(Xm-1,pos,1)>mx){
X2=Xm-1;
}else if(Ask(Xm+1,pos,1)>mx){
X1=Xm+1;
}else Ans(Xm,pos,1);
int Ym=Y1+Y2>>1;
mx=0,pos=0;
for(int i=X1;i<=X2;i++){
}
}*/
}else{
}
return 0;
}