제출 #1222833

#제출 시각아이디문제언어결과실행 시간메모리
1222833overwatch9Light Bulbs (EGOI24_lightbulbs)C++20
22 / 100
76 ms444 KiB
#include <bits/stdc++.h> using namespace std; int n; vector <string> query, actual; void print_query() { cout << "?" << endl; for (int i = 0; i < n; i++) { cout << query[i] << endl; } } void print_ans(char x) { cout << "!" << endl; vector <string> ans(n); for (int i = 0; i < n; i++) ans[i].resize(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++) { cout << ans[i] << endl; } } int main() { cin >> n; int cur = 0, res; actual.resize(n); query.resize(n); for (int i = 0; i < n; i++) { actual[i].resize(n, '0'); query[i].resize(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...