Submission #1359709

#TimeUsernameProblemLanguageResultExecution timeMemory
1359709FZ_LaabidiDark Ride (EGOI25_darkride)C++20
100 / 100
7 ms668 KiB

#include <bits/stdc++.h>
#define int long long
#define F first
#define S second
using namespace std;
int vit(int xx){
    int v = 1, c = 0;
    while(v<xx){
        v*=2;
        c++;
    }
    return c;
}
signed main(){
    int n; cin >> n;
    int vo = vit(n);
    vector<bool> sim(vo+1, false);
    int pi = 0,  y = -1;
    for(int x=0; x<vo+1; x++){
        cout << "? ";
        for(int i=0; i<n; i++){
            if((1<<x)&i)cout << "1";
            else cout << "0";
        }
        cout << endl;
        cin >> pi;
        if(pi%2==0)sim[x]= true;
        else y = x;
    }
    vector<int> tovi;
    for(int i=0; i<n; i++){
        if((1<<y)&i)tovi.push_back(i);
    }
  //  for(auto it: tovi)cout << it << " ";
    // code the viary search
    int fi = 0, ri = tovi.size();
    if(tovi.size()>1){
        while(fi < ri){
            int m = (fi+ri)/2;
            string s = "";
            for(int i=0; i<n; i++)s.push_back('0');
            for(int i=0; i<=m; i++)s[tovi[i]]= '1';
            cout << "? "<< s << endl;
            int ss; cin >> ss;
            if(ss%2==0) fi = m+1;
            else ri = m;
        }
    }
    int xx = tovi[fi];
    int yy = 0;
    for(int i=0; i<vo+1; i++){
        if(sim[i]&&xx&(1<<i))yy+=(1<<i);
        if(!sim[i]&& !(xx&(1<<i)))yy+=(1<<i);
    }
    cout << "! "<< xx << " "<< yy << endl;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...