Submission #1361798

#TimeUsernameProblemLanguageResultExecution timeMemory
1361798imchyDark Ride (EGOI25_darkride)C++20
24 / 100
4 ms448 KiB
#include <bits/stdc++.h>

using namespace std;

using ll = long long;

vector<char> s;
pair<int, int> ans={-1,-1};
int n;

int uPrvoj(int l, int r){
    if(l==r){
        return l;
    }
    int pl=l, pr=(r+l)/2;

    for(int i=pl;i<=pr;i++){
        s[i]='1';
    }

    cout<<"?";

    for(int i=0;i<n;i++){
        cout<<s[i];
    }
    cout<<endl;

    int k;
    cin>>k;

    for(int i=pl;i<=pr;i++){
        s[i]='0';
    }

    if(k%2==0)
        return uPrvoj(pr+1, r);

    return uPrvoj(pl, pr);
}

int main(){
    cin>>n;
    s.resize(n);
    for(int i=0;i<n;i++){
        s[i]='0';
    }

    if(n<=30){
    for(int i=0;i<n;i++){
        s[i]='1';
        cout<<"?";
        for(int j=0;j<n;j++)
            cout<<s[j];

        int k;
        cout<<endl;
        cin>>k;
        if(k==1){
            if(ans.first==-1)
                ans.first=i;
            else
                ans.second=i;
        }
        s[i]='0';

        if(ans.first!=-1 && ans.second!=-1){
            cout<<"!"<<ans.first<<" "<<ans.second<<endl;
            return 0;
        }
    }
    }

    else{
        int l=0, r=n-1;
        int a=-1;

        pair<int, int> a1, a2;

        while(a==-1){
            int tr=r;
            r=(r+l)/2;
            for(int i=l;i<=r;i++){
                s[i]='1';
            }

            cout<<"?";
            for(int i=0;i<n;i++){
                cout<<s[i];
            }
            cout<<endl;

            int k;
            cin>>k;

            for(int i=l;i<=r;i++){
                s[i]='0';
            }

            if(k==(r-l+1)*2){
                l=r+1;
                r=tr;
            }
            else if(k==(r-l)*2+1){
                a1.first=l;
                a1.second=r;
                a2.first=r+1;
                a2.second=tr;
                a=1;
            }
        }

        ans.first=uPrvoj(a1.first, a1.second);
        ans.second=uPrvoj(a2.first, a2.second);

        cout<<"!"<<ans.first<<" "<<ans.second<<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...