Submission #1239090

#TimeUsernameProblemLanguageResultExecution timeMemory
1239090clemmy14Light Bulbs (EGOI24_lightbulbs)C++20
57.44 / 100
353 ms508 KiB
#include<bits/stdc++.h>
using namespace std;

int n; 
vector<vector<int>> cur;

void question() {
    cout << "?" << endl;
    for(int i=0; i<n; i++) {
        for(int j=0; j<n; j++) cout << cur[i][j];
        cout << endl; 
    }
}

bool check(int m, int i) {
    for(int j=0; j<n; j++) cur[i][j]=0;
    for(int j=0; j<=m; j++) cur[i][j]=1;
    question();
    int a; cin >> a;
    return ((m+1)*n == a);
}

int lastTrue(int lo, int hi, int i) {
    lo--;
    while(lo < hi) {
        int mid = lo+(hi-lo+1)/2;
        if(check(mid, i)) lo=mid;
        else hi=mid-1;
    }
    return lo;
}

signed main() {
    cin >> n;
    cur = vector<vector<int>>(n, vector<int>(n, 0));
    vector<vector<int>> ans=cur;
    for(int i=0; i<n; i++) {
        for(int j=0; j<n; j++) cur[i][j]=1;
        question();
        int a; cin >> a;
        if(a == n*n) {
            ans=cur; break;
        }
        cur[i][0]=0;
        question();
        int b; cin >> b;
        if(a == b || a == b+1) {
            ans[i][0]=1; 
            for(int j=0; j<n; j++) cur[i][j]=0;
            continue;
        }
        int c=lastTrue(0, n-1, i);
        ans[i][c+1]=1;
        for(int j=0; j<n; j++) cur[i][j]=0;
    }
    cout << "!" << endl;
    for(int i=0; i<n; i++) {
        for(int j=0; j<n; j++) cout << ans[i][j];
        cout << endl; 
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...