# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
357678 | urd05 | Colors (BOI20_colors) | C++14 | 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;
int main(void) {
if (n<=1000) {
long long n;
scanf("%lld",&n);
long long one=(n-1)/4+1;
long long two=(3*n-1)/4+1;
printf("? %lld\n",two);
fflush(stdout);
int got;
scanf("%d",&got);
printf("? %lld\n",one);
fflush(stdout);
scanf("%d",&got);
long long ret;
if (got==0) {
int l=one-1+n-two;
int d=two-one;
ret=n;
for(int i=0;i<l;i++) {
long long nt=(two<one?two-1:two+1);
printf("? %lld\n",nt);
fflush(stdout);
scanf("%d",&got);
if (got==1) {
ret=d+i+1;
break;
}
two=one;
one=nt;
}
}
else {
int l=two-one;
ret=1;
for(int i=l-1;i>0;i--) {
int nt=(two<one?two+1:two-1);
printf("? %lld\n",nt);
fflush(stdout);
scanf("%d",&got);
if (got==0) {
ret=i+1;
break;
}
two=one;
one=nt;
}
}
printf("= %lld\n",ret);
fflush(stdout);
return 0;
}
long long n;
scanf("%lld",&n);
long long prev=0;
long long d=0;
int got;
for(int i=29;i>0;i--) {
long long nd=d+(1<<i);
if (nd>=n) {
continue;
}
long long one=(n+1)/2-nd/2;
long long two=(n+1)/2+(nd+1)/2;
printf("? %lld\n",two);
fflush(stdout);
scanf("%d",&got);
printf("? %lld\n",one);
fflush(stdout);
scanf("%d",&got);
if (got==0) {
d+=(1<<i);
}
prev=one;
}
printf("? %lld\n",prev+d+1);
fflush(stdout);
scanf("%d",&got);
if (got==0) {
d++;
}
printf("= %lld\n",d);
fflush(stdout);
}