제출 #1336353

#제출 시각아이디문제언어결과실행 시간메모리
1336353goulthenLight Bulbs (EGOI24_lightbulbs)C++20
0 / 100
1 ms436 KiB
#include <bits/stdc++.h>
using namespace std;

#define rep(i,a,b) for (int i = a; i <= b; i++)
#define per(i,a,b) for (int i = a; i >= b; i--)
#define pb push_back
#define all(v) (v).begin(), (v).end()
const int MAXN = 110;
int ok[MAXN][MAXN],n;
int h[MAXN];

void print(int i, int mid, char sp) {
    cout << sp << " " << endl;
    rep(j,1,mid) ok[i][j] = 1;

    rep(i,1,n) rep(j,1,n) {
        cout << (ok[i][j]);
        if(j==n) cout << endl;
    }

    rep(j,1,mid) ok[i][j] = 0;
}

int ask(int i, int mid) {
    print(i,mid, '?');

    int ans;cin >> ans;
    return ans;
}

// 0 -> H
// 1 -> V

int main() {
    ios_base::sync_with_stdio(0);cin.tie(nullptr);
    cin >> n;

    rep(i,1,n) {
        if(ask(i,n) == n*n) {
            print(i,0,'!');
            return 0;
        }
    }

    rep(i,1,n) {
        int lo = 2, hi = n, ans=n;
        while(lo<=hi) {
            int mid = (lo+hi)>>1;
            int y = ask(i,mid);
            if(y>n && y<n*mid) {
                ans = mid;
                hi = mid-1;
            } else {
                lo = mid+1;
            }
        }
        int y = ans%n+1;
        ok[i][ans] = 1;
        ok[i][y] = 1;
        int v = ask(i,0);
        if(v == n) {
            h[i] = ans;
        }
        if(v == 2*n) {
            h[i] = ans-1;
        }
        ok[i][ans] = 0;
        ok[i][ans-1] = 1;
        v = ask(i,0);
        if(v == n) {
            h[i] = ans-1;
        }
        if(v == 2*n) {
            h[i] = ans;
        }

        ok[i][ans-1] = 0;
        ok[i][y] = 0;
    }

    rep(i,1,n) {
        ok[i][h[i]] = 1;
    }

    print(0,0,'!');
    
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...