제출 #1222831

#제출 시각아이디문제언어결과실행 시간메모리
1222831overwatch9Light Bulbs (EGOI24_lightbulbs)C++20
22 / 100
621 ms444 KiB
#include <bits/stdc++.h> using namespace std; int n; vector <vector <char>> query, actual; void reset() { for (int i = 0; i < n; i++) fill(query[i].begin(), query[i].end(), '0'); } void print_query() { cout << "?" << endl; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) cout << query[i][j]; cout << endl; } } void print_ans(char x) { cout << "!" << endl; vector <vector <char>> ans(n, vector <char> (n, '0')); if (x == 'V') { for (int j = 0; j < n; j++) { for (int i = 0; i < n; i++) { if (actual[i][j] == 'V') { ans[i][j] = '1'; break; } } } } else { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (actual[i][j] == 'H') { ans[i][j] = '1'; break; } } } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) cout << ans[i][j]; cout << endl; } } int main() { cin >> n; int cur = 0, res; actual = query = vector <vector <char>> (n, vector <char> (n, '0')); query[0][0] = '1'; query[n-1][0] = '1'; print_query(); query[0][0] = '0'; query[n-1][0] = '0'; cin >> cur; if (cur == n) { // both vertical actual[0][0] = actual[n-1][0] = 'V'; for (int i = 1; i < n-1; i++) { query[0][0] = query[i][0] = '1'; print_query(); query[0][0] = query[i][0] = '0'; cin >> res; if (res == n) actual[i][0] = 'V'; else actual[i][0] = 'H'; } } else if (cur == n * 2) { // both horizontal actual[0][0] = actual[n-1][0] = 'H'; for (int i = 1; i < n-1; i++) { ; query[0][0] = query[i][0] = '1'; print_query(); query[0][0] = query[i][0] = '0'; cin >> res; if (res == 2 * n) actual[i][0] = 'H'; else actual[i][0] = 'V'; } } else { for (int i = 1; i < n-1; i++) { ; query[0][0] = query[n-1][0] = query[i][0] = '1'; print_query(); query[0][0] = query[n-1][0] = query[i][0] = '0'; cin >> res; if (res > cur) actual[i][0] = 'H'; else actual[i][0] = 'V'; } query[0][0] = query[1][0] = '1'; print_query(); query[0][0] = query[1][0] = '0'; cin >> cur; if (actual[1][0] == 'H') { if (cur == 2 * n) { actual[0][0] = 'H'; actual[n-1][0] = 'V'; } else { actual[0][0] = 'V'; actual[n-1][0] = 'H'; } } else { if (cur == n) { actual[0][0] = 'V'; actual[n-1][0] = 'H'; } else { actual[0][0] = 'H'; actual[n-1][0] = 'V'; } } } ; for (int i = 0; i < n; i++) { for (int j = 1; j < n; j++) { ; query[i][0] = query[i][j] = '1'; print_query(); query[i][0] = query[i][j] = '0'; cin >> res; if (actual[i][0] == 'H') { if (res == n) actual[i][j] = 'H'; else actual[i][j] = 'V'; } else { if (res == 2 * n) actual[i][j] = 'V'; else actual[i][j] = 'H'; } } } bool verts = true; for (int j = 0; j < n; j++) { bool found = false; for (int i = 0; i < n; i++) { if (actual[i][j] == 'V') found = true; } if (!found) { verts = false; break; } } if (verts) print_ans('V'); else print_ans('H'); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...