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"
//#pragma GCC optimize("O3")
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll>pairll;
typedef long double ld;
#define fr first
#define sc second
#define pb push_back
#define INF 100000000007
#define endl '\n'
#define MOD 998244353
#define A 31
#define N 500007
ll n;
int main(){
cin>>n;
ll x=0;
ll a=n/2+1;
ll b=a;
ll y=0;
ll l1=a;
ll r1=b;
ll l=1;
ll r=n;
ll f=1;
for(int i=pow(2,20);i>=4;i/=2){
if(x+i<n-2){
l1=a+1;
r1=b;
a=max(1ll,(n-x-i)/2);
b=a+x+i;
cout<<"? "<<a<<endl;
cout.flush();
cin>>y;
cout<<"? "<<b<<endl;
cout.flush();
cin>>y;
if(y==0){
x+=i;
}
else{
l=a+1;
r=b-1;
}
}
}
//if(y==1)
if(a<l && b>r){
while((a<l1 && f==1) || (b>r1 && f==0)){
if(f==1){
f=0;
a++;
cout<<"? "<<a<<endl;
cout.flush();
cin>>y;
if(y==0){
cout<<"= "<<b-a+1<<endl;
cout.flush();
return 0;
}
}else{
f=1;
b--;
cout<<"? "<<b<<endl;
cout.flush();
cin>>y;
if(y==0){
cout<<"= "<<b-a+1<<endl;
cout.flush();
return 0;
}
}
}
}
while((a>l && f==1) || (b<r && f==0)){
if(f==1){
f=0;
a--;
cout<<"? "<<a<<endl;
cout.flush();
cin>>y;
if(y==0)x++;
}else{
f=1;
b++;
cout<<"? "<<b<<endl;
cout.flush();
cin>>y;
if(y==0)x++;
}
}
cout<<"= "<<x+1<<endl;
cout.flush();
return 0;
}
# | 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... |