This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#define CF_SUBWAY_SURFER
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int h(int i,int j){return i>j?i:j;}
int h_(int i,int j){return -h(-i,-j);}
int a_,past_ask[66],b_;
int ask(long long c){for(int j=0;j<b_;++j)if(past_ask[j]==c)return 0;past_ask[b_++]=c;printf("? %lld\n",c);fflush(stdout);scanf("%d",&a_);return a_;}
#define report(x) do{printf("= %lld\n",(long long)(x));fflush(stdout);goto X;}while(0)
int main(){
int t;
#ifndef CF_SUBWAY_SURFER
t=1
#else
scanf("%d",&t);
#endif
while(t--){
b_=0;
long long n;
scanf("%lld",&n);
if(n==1)report(1);
if(n<=64){
ask(1);
if(!ask(n))report(n);
for(int r=n-1,l=2,d=n-1,i=1,cc=0;cc<n-2;++i,--d,++cc)if((i%2&&!ask(l++)) || (i%2==0&&!ask(r--)))report(d);
report(1);
}
if(n<=125){
int m = n / 2 + 1;
ask(m);
int mid = ask(1);
if (!ask(n))report(n);
if(mid){
for(int r=m-1,l=2,d=m-1,i=1,cc=0;d>1;++i,--d,++cc)
if(i%2&&!ask(l++))report(d);
else if(i%2==0&&!ask(r--))report(d);
report(1);
}else{
for(int r=n-1,l=2,d=n-1,i=1,cc=0;d>1;++i,--d,++cc){
if(i%2){
if(l==m)report(1);
if(!ask(l++))report(d);
}
else{
if(r==m)report(1);
else if(!ask(r--)) report(d);
}
}
report(1);
}
}
if(n<=1000){
int S=34,m=n/2+1;
ask(m);
int ll=m,rr=m;
for(int ii=1;;++ii){
if(ii%2){
ll=h(ll-S,1);
if(ask(ll)){
ask(rr);
for(int r=rr-1,l=ll+1,d=rr-ll,i=0;d>1;++i,--d){
if(i%2){ if(!ask(l++))report(d); }
else{ if(!ask(r--))report(d); }
}
}
}else{
rr=h_(rr+S,n);
if(ask(rr)){
for(int r=rr-1,l=ll+1,d=rr-ll,i=1;d>1;++i,--d){
if(i%2){ if(!ask(l++))report(d); }
else{ if(!ask(r--))report(d); }
}
}
}
}
report(1);
}
else __builtin_trap();
X:;
}
}
Compilation message (stderr)
Colors.c: In function 'ask':
Colors.c:8:123: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
8 | int ask(long long c){for(int j=0;j<b_;++j)if(past_ask[j]==c)return 0;past_ask[b_++]=c;printf("? %lld\n",c);fflush(stdout);scanf("%d",&a_);return a_;}
| ^~~~~~~~~~~~~~~
Colors.c: In function 'main':
Colors.c:15:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
15 | scanf("%d",&t);
| ^~~~~~~~~~~~~~
Colors.c:20:9: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
20 | scanf("%lld",&n);
| ^~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |