제출 #1356706

#제출 시각아이디문제언어결과실행 시간메모리
1356706mxhrvsLight Bulbs (EGOI24_lightbulbs)C++20
0 / 100
0 ms344 KiB
#include <iostream>
#include <vector>
#include <string>

using namespace std;

int ask(int n, const vector<string>& grid) {
    cout << "?" << endl;
    for (int i = 0; i < n; i++) {
        cout << grid[i] << endl;
    }
    int res;
    cin >> res;
    if (res == -1) exit(0); 
    return res;
}

int main() {
    int n;
    cin >> n;

    vector<int> selected_col(n, -1);
    bool all_rows_have_H = true;

    for (int i = 0; i < n; i++) {
        vector<string> row_grid(n, string(n, '0'));
        for (int j = 0; j < n; j++) row_grid[i][j] = '1';
        
        int res = ask(n, row_grid);
        
        if (res == n * n) {
            cout << "!" << endl;
            for (int k = 0; k < n; k++) {
                string output_row(n, '0');
                output_row[k] = '1'; 
            }
            for (int k = 0; k < n; k++) {
                string r(n, '0');
                r[k] = '1';
                cout << r << endl;
            }
            return 0;
        }

        int low = 0, high = n - 1, found_j = 0;
        while (low <= high) {
            int mid = low + (high - low) / 2;
            vector<string> test_grid(n, string(n, '0'));
            for (int j = low; j <= mid; j++) test_grid[i][j] = '1';
            
            int current_res = ask(n, test_grid);
            
            if (current_res % n != 0 || (current_res == n && (mid-low+1) == 1)) {
                found_j = mid;
                if (low == high) break;
                high = mid;
            } else {
                low = mid + 1;
            }
        }
        selected_col[i] = found_j;
    }

    cout << "!" << endl;
    for (int i = 0; i < n; i++) {
        string final_row(n, '0');
        if (selected_col[i] != -1) final_row[selected_col[i]] = '1';
        cout << final_row << endl;
    }

    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…