Submission #1222806

#TimeUsernameProblemLanguageResultExecution timeMemory
1222806overwatch9Light Bulbs (EGOI24_lightbulbs)C++20
22 / 100
618 ms452 KiB
#include <bits/stdc++.h> using namespace std; int n; vector <vector <char>> query, actual; 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 reset() { for (int i = 0; i < n; i++) fill(query[i].begin(), query[i].end(), '0'); } void print_ans(char x) { cout << "!" << endl; vector <vector <char>> ans(n+5, vector <char> (n+5, '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; actual = query = vector <vector <char>> (n+5, vector <char> (n+5, '0')); query[0][0] = '1'; query[n-1][0] = '1'; print_query(); cin >> cur; if (cur == n) { // both vertical actual[0][0] = actual[n-1][0] = 'V'; } else if (cur == n * 2) { // both horizontal actual[0][0] = actual[n-1][0] = 'H'; } if (actual[0][0] == 'H') { for (int i = 1; i < n-1; i++) { reset(); query[0][0] = query[i][0] = '1'; print_query(); int res; cin >> res; if (res == 2 * n) actual[i][0] = 'H'; else actual[i][0] = 'V'; } } else if (actual[0][0] == 'V') { for (int i = 1; i < n-1; i++) { reset(); query[0][0] = query[i][0] = '1'; print_query(); int res; cin >> res; if (res == n) actual[i][0] = 'V'; else actual[i][0] = 'H'; } } else { for (int i = 1; i < n-1; i++) { reset(); query[0][0] = query[n-1][0] = query[i][0] = '1'; print_query(); int res; cin >> res; if (res > cur) actual[i][0] = 'H'; else actual[i][0] = 'V'; } } reset(); if (actual[0][0] == '0') { query[0][0] = query[1][0] = '1'; print_query(); 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++) { reset(); query[i][0] = query[i][j] = '1'; print_query(); int res; 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'); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...