#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
map<ll, bool>vis;
bool ask(ll x){
cout << "? " << x << endl;
vis[x] = true;
int k;
cin >> k;
return k == 1;
}
ll n;
namespace sub1{
void solve(){
ask(1);
for(int i = n, cur = 1; i > 1; i--){
if((n ^ i ^ 1) & 1){
if(!ask(cur += i - 1)){
return void(cout << "= " << i << endl);
}
}
else if(!ask(cur -= i - 1)){
return void(cout << "= " << i << endl);
}
}
cout << "= 1" << endl;
}
}
namespace sub23{
void solve(){
int low = 1, high = n - 1, ans = 1;
bool parity = true;
while(low <= high){
int mid = (low + high) >> 1;
for(int i = n - mid; i > 0; i--){
if(!vis[i] && !vis[i + mid]){
ask(i);
if(!ask(i + mid)){
low = ans = mid + 1;
}
else{
high = mid - 1;
}
break;
}
}
}
cout << "= " << ans << endl;
}
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n;
if(n <= 64){
sub1::solve();
}
else if(n <= 1000000000){
sub23::solve();
}
}
| # | 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... |