제출 #1357238

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

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

    vector<string> s(n, string(n, '0')); 
    int x;

    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) s[i][j] = '1';
        cout << "?\n";
        for(int j = 0; j < n; j++) cout << s[j] << endl;
        if (!(cin >> x)) break;
        if(x == n * n) {
            cout << "!\n";
            for(int j = 0; j < n; j++) cout << s[j] << endl;
            return 0; 
        }
        for(int j = 0; j < n; j++) s[i][j] = '0';
    }

    vector<pair<int, int>> v;
    for(int i = 0; i < n; i++) {
        bool tr = false;
        int l = -1;
        int j = 0; 

        while(!tr && j < n - 2) {
            s[i][j] = '1';
            s[i][j + 1] = '1';
            cout << "?\n";
            for(int k = 0; k < n; k++) cout << s[k] << endl;
            cin >> x;

            if(x == 2 * n) { 
                s[i][j] = '0'; s[i][j + 1] = '0';
                j += 2; 
            }
            else if(x == n) { 
                tr = true; l = j; 
            }
            else { 
                s[i][j] = '0';
                s[i][j + 2] = '1'; 
                cout << "?\n";
                for(int k = 0; k < n; k++) cout << s[k] << endl;
                cin >> x;

                if(x == 2 * n) { tr = true; l = j; }
                else if(x == n) { tr = true; l = j + 1; }
                else {
                    s[i][j] = '1'; s[i][j + 1] = '0';
                    cout << "?\n";
                    for(int k = 0; k < n; k++) cout << s[k] << endl;
                    cin >> x;
                    if(x == 2 * n) { tr = true; l = j + 1; }
                    if(x == n) { tr = true; l = j; }
                }
            }
            s[i][j] = '0'; s[i][j+1] = '0'; if(j+2 < n) s[i][j+2] = '0';
        }

        if (!tr) {
            while (j < n) {
                if (j == n - 1) {
                    l = j;
                    tr = true;
                    break;
                }
                s[i][j] = '1';
                s[i][j + 1] = '1';
                cout << "?\n";
                for (int k = 0; k < n; k++) cout << s[k] << endl;
                if (!(cin >> x)) break;

                if (x == n) {
                    l = j;
                    tr = true;
                } else if (x < 2 * n) {
                    s[i][j] = '0';
                    cout << "?\n";
                    for (int k = 0; k < n; k++) cout << s[k] << endl;
                    cin >> x;
                    if (x == n) l = j + 1;
                    else l = j;
                    tr = true;
                } else {
                    j++;
                }
                s[i][j] = '0';
                if (j + 1 < n) s[i][j + 1] = '0';
                if (tr) break;
            }
        }
        v.push_back({i, l});
    }

    for(int i = 0; i < n; i++) fill(s[i].begin(), s[i].end(), '0');
    for(auto p : v) {
        if(p.second != -1) s[p.first][p.second] = '1';
    }

    cout << "!\n";
    for(int i = 0; i < n; i++) cout << s[i] << endl;

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