Submission #1363354

#TimeUsernameProblemLanguageResultExecution timeMemory
1363354liptonekDark Ride (EGOI25_darkride)C++20
100 / 100
1 ms624 KiB
#include <bits/stdc++.h>
using namespace std;

int perform(int n, const vector<int>& active)
{
    string bit(n,'0');

    for(int idx : active)
    {
        if(idx>=0 && idx<n)
        {
            bit[idx]='1';
        }
    }

    cout<<"? "<<bit<<endl;

    int screams;
    cin>>screams;

    return screams;
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n;
    cin>>n;

    int diff=0;
    int bit=0;

    while((1<<bit)<n)
    {
        bit++;
    }

    for(int k=0; k<bit; k++)
    {
        vector<int> test;

        for(int i=0; i<n; i++)
        {
            if((i>>k) & 1)
            {
                test.push_back(i);
            }
        }

        if(test.empty())
        {
            continue;
        }

        if(perform(n,test)%2!=0)
        {
            diff |= (1<<k);
        }
    }

    int j=0;

    while(!((diff>>j) & 1))
    {
        j++;
    }

    vector<int> candidates;

    for(int i=0; i<n; i++)
    {
        if(!((i>>j) & 1))
        {
            candidates.push_back(i);
        }
    }

    int low=0;
    int high=(int)candidates.size()-1;

    while(low<high)
    {
        int mid=(low+high)/2;

        vector<int> first;

        for(int i=0; i<=mid; i++)
        {
            first.push_back(candidates[i]);
        }

        if(perform(n,first)%2!=0)
        {
            high=mid;
        }
        else
        {
            low=mid+1;
        }
    }

    int sa=candidates[low];
    int sb=sa^diff;

    cout<<"! "<<sa<<" "<<sb<<endl;

    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...