이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "bits/stdc++.h"
using namespace std;
typedef vector<int> vi;
typedef vector<vi> vvi;
#define sz(x) (int)(x).size()
vi queries;
vi ans;
int query(int i)
{
queries.push_back(i);
cout << "? " << i << endl;
int a;
cin >> a;
ans.push_back(a);
return a;
}
void answer(int i)
{
cout << "= " << i << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int N;
cin >> N;
int l = 1, r = N;
while (r - l > 60)
l += 30, r -= 30;
if (r - l > 30)
l = (l + r) / 2;
int len = r - l;
int a = 0;
query(l);
a = query(r);
while (a == 0 && len < N - 1)
{
len += 30;
int last = queries.back();
double center = (queries[sz(queries) - 2] + queries.back()) / (double)2;
int next = last;
if (last < center)
next = min(N, next + len);
else
next = max(1, next - len);
a = query(next);
len = abs(queries[sz(queries) - 2] - queries.back());
}
if (a == 0)
answer(N);
else
{
double center = (queries[sz(queries) - 2] + queries.back()) / (double)2;
int lowerB = max(1, len - 30);
while (a == 1 && len > lowerB)
{
len -= 1;
int last = queries.back();
int next = last;
if (last < center)
next += len;
else
next -= len;
a = query(next);
}
if (a == 0)
answer(len + 1);
else
answer(len);
}
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... |