Submission #1361425

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

using namespace std;

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+1)%2==0) ? r-(r-l+1)/2 : r-(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==(pr-pl+1)*2)
        return uPrvoj(pl, pr);

    return uPrvoj(pr+1, r);
}

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{
        ans.first=0;

        ans.second=uPrvoj(1, n-1);

        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...