Submission #1364897

#TimeUsernameProblemLanguageResultExecution timeMemory
1364897biserailievaLight Bulbs (EGOI24_lightbulbs)C++20
0 / 100
0 ms348 KiB
#include <bits/stdc++.h>
using namespace std;

int n;

int askRow(int row, int l, int r){
    cout << "?" << endl;

    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            if(i == row && j >= l && j <= r) cout << 1;
            else cout << 0;
        }
        cout << '\n';
    }

    cout.flush();

    int x;
    cin >> x;
    return x;
}

vector<int> fullRowVal;

bool hasH(int row, int l, int r){
    int val = askRow(row, l, r);
    return val == fullRowVal[row];
}

int findH(int row){
    int l = 0, r = n - 1;
    int pos = -1;

    while(l <= r){
        int mid = (l + r) / 2;

        if(hasH(row, 0, mid)){
            pos = mid;
            r = mid - 1;
        } else {
            l = mid + 1;
        }
    }
    return pos;
}

int main(){
    cin.tie(0)->sync_with_stdio(0);

    cin >> n;

    vector<vector<int>> ans(n, vector<int>(n, 0));
    vector<pair<int,int>> chosen;

    fullRowVal.assign(n, 0);
    for(int i = 0; i < n; i++){
        fullRowVal[i] = askRow(i, 0, n-1);
    }

    for(int i = 0; i < n; i++){

        if(!hasH(i, 0, n-1)){
            for(int j = 0; j < n; j++){
                ans[i][j] = 1;
            }

            cout << "!" << endl;
            for(int x = 0; x < n; x++){
                for(int y = 0; y < n; y++){
                    cout << ans[x][y];
                }
                cout << '\n';
            }
            cout.flush();
            return 0;
        }

        int pos = findH(i);
        chosen.push_back({i, pos});
    }

    for(auto [x, y] : chosen){
        ans[x][y] = 1;
    }

    cout << "!" << endl;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            cout << ans[i][j];
        }
        cout << '\n';
    }
    cout.flush();

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