#include <bits/stdc++.h>
using namespace std;
long long n;
long long rez = 1, ans;
vector <long long> solve (long long x){
vector <long long> drugi;
if (x == 2){
drugi.push_back(1);
drugi.push_back(2);
return drugi;
}
drugi = solve((x + 1) / 2);
int vel = drugi.size();
if (drugi[vel - 1] < drugi[vel - 2]) drugi.push_back(drugi[vel - 1] + (x + 1) / 2);
else{
long long zadnji = drugi[vel - 1];
drugi.pop_back();
drugi.push_back(zadnji + (x + 1) / 2);
drugi.push_back(zadnji);
for (int i = 0; i < vel - 1; i++) drugi[i] += (x + 1) / 2;
}
return drugi;
}
int main (void){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
vector <long long> v = solve(n);
reverse(v.begin(), v.end());
cout << "? " << v[0] << endl;
cin >> ans;
for (int i = 1; i < v.size(); i++){
cout << "? " << v[i] << endl;
cin >> ans;
if (ans == 0){
rez += (n + 1) / 2;
if (v[i - 1] > v[i]) for (int j = i + 1; j < v.size(); j+=2) v[j] += (n + 1) / 2;
else for (int j = i + 1; j < v.size(); j+=2) v[j] -= (n + 1) / 2;
}
n = (n + 1) / 2;
}
cout << "= " << rez << endl;
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... |