제출 #1356989

#제출 시각아이디문제언어결과실행 시간메모리
1356989talyLight Bulbs (EGOI24_lightbulbs)C++20
79.97 / 100
46 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));
    int x=0, y=0;
    mat[0][0]=1;
    mat[0][1]=1;
    int r=ask();
    if(r==n){
        sent[0][0]=1;
        sent[0][1]=1;
    }else if(r==2*n){
        sent[0][0]=-1;
        sent[0][1]=-1;
    }else{
        mat[0][1]=0;
        mat[0][2]=1;
        int r2=ask();
        if(r2==n){
            sent[0][0]=1;
            sent[0][2]=1;
            sent[0][1]=-1;
        }else if(r2==2*n){
            sent[0][0]=-1;
            sent[0][2]=-1;
            sent[0][1]=1;
        }else{
            mat[0][0]=0;
            mat[0][1]=1;
            int r3=ask();
            if(r3==n){
                sent[0][1]=1;
                sent[0][2]=1;
                sent[0][0]=-1;
            }else if(r3==2*n){
                sent[0][1]=-1;
                sent[0][0]=1;
                sent[0][2]=-1;
            }
        }
    }
    mat[0][0]=0;
    mat[0][1]=0;
    mat[0][2]=0;
    if(sent[0][0]==1){
        ver.pb({0, 0});
    }else{
        hor.pb({0, 0});
    }
    // 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==n-1&&y==n-1)&&ver.sz()<n&&hor.sz()<n){
        if(sent[x][y]==1){
            if(sent[x+1][y]==0){
                mat[x][y]=1;
                mat[x+1][y]=1;
                int r = ask();
                mat[x][y]=0;
                mat[x+1][y]=0;
                if(r==2*n){
                    sent[x+1][y]=1;
                    ver.pb({x+1, y});
                }else{
                    sent[x+1][y]=-1;
                    hor.pb({x+1, y});

                }
            }else{
                if(sent[x+1][y]==1){
                    ver.pb({x+1, y});
                }else{
                    hor.pb({x+1, y});
                }
            }
            x++;
        }else{
            if(sent[x][y+1]==0){
                mat[x][y]=1;
                mat[x][y+1]=1;
                int r = ask();
                mat[x][y]=0;
                mat[x][y+1]=0;
                if(r==2*n){
                    sent[x][y+1]=-1;
                    hor.pb({x, y+1});
                }else{
                    sent[x][y+1]=1;
                    ver.pb({x, y+1});
                }
            }else{
                if(sent[x][y+1]==1){
                    ver.pb({x, y+1});
                }else{
                    hor.pb({x, y+1});
                }
            }
            y++;
        }
    }
    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;
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…