Submission #723805

#TimeUsernameProblemLanguageResultExecution timeMemory
723805JohannColors (BOI20_colors)C++14
43 / 100
2252 ms3608 KiB
#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;
    bool editL = false;
    while (r - l > 60)
    {
        if (editL)
            l += 30;
        else
            r -= 30;
        editL = !editL;
    }
    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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...