Submission #1356767

#TimeUsernameProblemLanguageResultExecution timeMemory
1356767yyc000123Light Bulbs (EGOI24_lightbulbs)C++20
58.57 / 100
215 ms500 KiB
#include<bits/stdc++.h>
using namespace std ;
const int N = 105 ;
int n , arr[N][N] , ans[N][N] ;

int q(){
    cout << "?" << endl ;
    for(int i=1 ; i<=n ; i++){
        for(int j=1 ; j<=n ; j++) cout << arr[i][j] , arr[i][j]=0 ;
        cout << endl ;
    }
    int k ; cin >> k ;
    return k ;
}

void solve(){
    int pos = 1 , k ;
    for(int i=1 ; i<=n ; i++){
        for(int j=1 ; j<=n ; j++) arr[i][j]=1 ;
        if(q()==n*n){
            for(int j=1 ; j<=n ; j++) ans[i][j]=1 ;
            return ;
        }
    }
    for(int i=2 ; i<=n ; i++){
        arr[1][pos]=arr[1][i]=1 ;
        k = q() ;
        if(k==2*n) pos++ ;
        else if(k==n) break ;
        else{
            if(pos>1) pos=i ;
            else{
                arr[1][1]=arr[1][3]=1 ;
                k = q() ;
                if(k==2*n) pos=2 ;
                else if(k==2*n-1){
                    arr[1][2]=arr[1][3]=1 ;
                    if(q()==n) pos=2 ;
                }
            }
            break ;
        }
    }
    ans[1][pos]=1 ;
    for(int i=2 ; i<=n ; i++){
        int le = 1 , ri = n ;
        while(le<ri-1){
            int mi = (le+ri)/2 ;
            for(int j=le ; j<=mi ; j++) arr[i][j]=1 ;
            k = q() ;
            if(k==n){
                ri=le ; break ;
            }
            if(k==n*(mi-le+1)) le=mi+1 ;
            else ri=mi ;
        }
        if(le==ri) ans[i][le]=1 ;
        else{
            arr[1][pos]=arr[i][le]=1 ;
            if(q()==2*n) ans[i][le]=1 ;
            else ans[i][ri]=1 ;
        }
    }
}

int main(){
    cin >> n ;
    solve() ;
    cout << "!" << endl ;
    for(int i=1 ; i<=n ; i++){
        for(int j=1 ; j<=n ; j++) cout << ans[i][j] ;
        cout << endl ;
    }
    return 0 ;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...