제출 #1223073

#제출 시각아이디문제언어결과실행 시간메모리
1223073overwatch9Light Bulbs (EGOI24_lightbulbs)C++20
57.44 / 100
34 ms464 KiB
#include <bits/stdc++.h> using namespace std; int n; vector <string> query, actual, ans; void print_query() { cout << "?" << endl; for (int i = 0; i < n; i++) { cout << query[i] << endl; } } void print_ans() { cout << "!" << endl; for (int i = 0; i < n; i++) cout << ans[i] << endl; } int main() { cin >> n; ans = actual = query = vector <string> (n); for (int i = 0; i < n; i++) { ans[i].resize(n, '0'); actual[i].resize(n, '0'); query[i].resize(n, '0'); } bool found_ans = false; for (int i = 0; i < n && !found_ans; i++) { int l = 0, r = n; // binary search to find a 'H' while (l < r) { int mid = (l + r) / 2; if (mid == 0) { query[i][0] = query[i][1] = '1'; print_query(); query[i][0] = query[i][1] = '0'; int res; cin >> res; if (res == n) r = 0; else if (res == n*2) { l = r = 1; } else { // res == n*2 - 1 query[i][0] = query[i][1] = query[i][2] = '1'; print_query(); query[i][0] = query[i][1] = query[i][2] = '0'; cin >> res; if (res == n*2 + n-2) { // (i, 2) is vertical query[i][0] = query[i][2] = '1'; print_query(); query[i][0] = query[i][2] = '0'; cin >> res; if (res == 2 * n) { l = r = 1; } else r = 0; } else { l = r = 2; } } } else { for (int j = 0; j <= mid; j++) query[i][j] = '1'; for (int j = mid+1; j < n; j++) query[i][j] = '0'; print_query(); int res; cin >> res; if (res == n * n) { ans = query; found_ans = true; break; } else if (res % n == 0 && res != n) { // all the points from 0 to mid are vertical points. l = mid + 1; } else { r = mid; } } } fill(query[i].begin(), query[i].end(), '0'); ans[i][r] = '1'; } print_ans(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...