Submission #1357011

#TimeUsernameProblemLanguageResultExecution timeMemory
1357011talyLight Bulbs (EGOI24_lightbulbs)C++20
80.52 / 100
45 ms608 KiB
#include <bits/stdc++.h>
#define int long long
#define pb push_back
#define pii pair<int, int>
#define ff first
#define ss second
#define tii tuple<int, int, int>
// #define endl '\n'
using namespace std;
#define rsz resize
#define sz size
#define ass assign
#define all(x) (x).begin(),(x).end()
int n;
vector<pii> hor, ver;
vector<vector<int>> mat;
vector<vector<int>> sent;

// int find(int x, int y){

// }

int ask(){
    cout << "?"<<endl;
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            cout << mat[i][j];
        }
        cout << endl;
    }
    int r; cin >> r;
    return r;
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n;
    mat.rsz(n, vector<int>(n));
    sent.rsz(n, vector<int>(n));
    for(int i=0; i<n; i++){
        mat[i][i]=1;
    }
    int rrr=ask();
    if(rrr==n*n){
        cout << "!"<<endl;
        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                cout << mat[i][j];
            }
            cout << endl;
        }
        return 0;
    }else{
        for(int i=0; i<n; i++){
            mat[i][i]=0;
        }
    }

    srand(time(0));
    vector<tuple<int, int, int, int>> ops = {{0,0,1,1}, {0,n-1,1,-1}, {n-1,0,-1,1}, {n-1,n-1,-1,-1}};
    int ind=0;
    int x=get<0>(ops[ind]), y=get<1>(ops[ind]);
    int ax = get<2>(ops[ind]);
    int ay = get<3>(ops[ind]);
    mat[x][y]=1;
    mat[x][y+ay]=1;
    int r=ask();
    if(r==n){
        sent[x][y]=1;
        sent[x][y+ay]=1;
    }else if(r==2*n){
        sent[x][y]=-1;
        sent[x][y+ay]=-1;
    }else{
        mat[x][y+ay]=0;
        mat[x][y+ay+ay]=1;
        int r2=ask();
        if(r2==n){
            sent[x][y]=1;
            sent[x][y+ay+ay]=1;
            sent[x][y+ay]=-1;
        }else if(r2==2*n){
            sent[x][y]=-1;
            sent[x][y+ay+ay]=-1;
            sent[x][y+ay]=1;
        }else{
            mat[x][y]=0;
            mat[x][y+ay]=1;
            int r3=ask();
            if(r3==n){
                sent[x][y+ay]=1;
                sent[x][y+ay+ay]=1;
                sent[x][y]=-1;
            }else if(r3==2*n){
                sent[x][y+ay]=-1;
                sent[x][y]=1;
                sent[x][y+ay+ay]=-1;
            }
        }
    }
    mat[x][y]=0;
    mat[x][y+ay]=0;
    mat[x][y+ay+ay]=0;
    if(sent[x][y]==1){
        ver.pb({x, y});
    }else{
        hor.pb({x, y});
    }
    // cout << sent[0][0]<<endl;
    // if(sent[0][1]==1){
    //     ver.pb({0, 1});
    // }else if(sent[0][1]==-1){
    //     hor.pb({0, 1});
    // }
    // if(sent[0][2]==1){
    //     ver.pb({0, 2});
    // }else if(sent[0][2]==-1){
    //     hor.pb({0, 2});
    // }
    while(!(x+ax>=n&&x+ax<0&&y+ay>=n&&y+ay<0)&&ver.sz()<n&&hor.sz()<n){
        if(sent[x][y]==1){
            if(sent[x+ax][y]==0){
                mat[x][y]=1;
                mat[x+ax][y]=1;
                int r = ask();
                mat[x][y]=0;
                mat[x+ax][y]=0;
                if(r==2*n){
                    sent[x+ax][y]=1;
                    ver.pb({x+ax, y});
                }else{
                    sent[x+ax][y]=-1;
                    hor.pb({x+ax, y});

                }
            }else{
                if(sent[x+ax][y]==1){
                    ver.pb({x+ax, y});
                }else{
                    hor.pb({x+ax, y});
                }
            }
            x+=ax;
        }else{
            if(sent[x][y+ay]==0){
                mat[x][y]=1;
                mat[x][y+ay]=1;
                int r = ask();
                mat[x][y]=0;
                mat[x][y+ay]=0;
                if(r==2*n){
                    sent[x][y+ay]=-1;
                    hor.pb({x, y+ay});
                }else{
                    sent[x][y+ay]=1;
                    ver.pb({x, y+ay});
                }
            }else{
                if(sent[x][y+ay]==1){
                    ver.pb({x, y+ay});
                }else{
                    hor.pb({x, y+ay});
                }
            }
            y+=ay;
        }
    }
    cout << "!"<<endl;
    if(ver.sz()==n){
        for(auto [a, b]:ver){
            mat[a][b]=1;
        }
    }else{
        for(auto [a, b]:hor){
            mat[a][b]=1;
        }
    }
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            cout << mat[i][j];
        }
        cout << endl;
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...