Submission #1048922

#TimeUsernameProblemLanguageResultExecution timeMemory
1048922EntityPlanttLight Bulbs (EGOI24_lightbulbs)C++17
76.87 / 100
117 ms1304 KiB
#include <iostream> #include <vector> using namespace std; typedef vector <vector <bool>> matrix; int n; vector <string> rot; /* 0 = intersect 1 = same 2 = parallel */ inline const matrix cm(vector <pair <int, int>> lamps = {}) { matrix m(n, vector<bool>(n, false)); for (auto &p : lamps) m[p.first][p.second] = true; return m; } short ask(short x1, short y1, short x2, short y2) { cout << '?'; for (auto &i : cm({{x1, y1}, {x2, y2}})) { cout << '\n'; for (bool &&j : i) cout << j; } cout << endl; int x; cin >> x; if (x == 2 * n) return 2; if (x == n) return 1; return 0; } void answer(const matrix &m) { cout << '!'; for (auto &i : m) { cout << '\n'; for (bool &&j : i) cout << j; } exit(0); } char rotof(short x, short y) { if (rot[x][y] == '.') { for (int i = 0; i < n; i++) { if (rot[x][i] != '.') { if (ask(x, i, x, y)) return rot[x][y] = rot[x][i]; return rot[x][y] = rot[x][i] == 'V' ? 'H' : 'V'; } if (rot[i][y] != '.') { if (ask(i, y, x, y)) return rot[x][y] = rot[i][y]; return rot[x][y] = rot[i][y] == 'V' ? 'H' : 'V'; } } } return rot[x][y]; } void ansvert() { matrix m = cm(); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (rot[j][i] == 'V') { m[j][i] = true; break; } } } answer(m); } void anshor() { matrix m = cm(); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (rot[i][j] == 'H') { m[i][j] = true; break; } } } answer(m); } signed main() { cin >> n; rot = vector(n, string(n, '.')); short ans = ask(0, 0, 0, 1); if (ans == 2) rot[0][0] = rot[0][1] = 'V'; else if (ans == 1) rot[0][0] = rot[0][1] = 'H'; else { ans = ask(0, 0, 0, 2); if (ans == 2) { rot[0][1] = 'H'; rot[0][0] = rot[0][2] = 'V'; } else if (ans == 1) { rot[0][1] = 'V'; rot[0][0] = rot[0][2] = 'H'; } else if (ask(0, 1, 0, 2) == 2) { rot[0][0] = 'H'; rot[0][1] = rot[0][2] = 'V'; } else { rot[0][0] = 'V'; rot[0][1] = rot[0][2] = 'H'; } } for (int i = 0, j = 1; i < n; i++) { if (rotof(0, i) == 'H') { while (j < n && rotof(j, i) == 'H') j++; if (j == n) anshor(); } } ansvert(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...