Submission #697154

#TimeUsernameProblemLanguageResultExecution timeMemory
697154ShinFurniture (JOI20_furniture)C++14
100 / 100
280 ms12820 KiB
#include <bits/stdc++.h> #define fi first #define se second #define mp make_pair using namespace std; template <class X, class Y> bool minimize(X &a, Y b) { if (a > b) return a = b, true; return false; } template <class X, class Y> bool maximize(X &a, Y b) { if (a < b) return a = b, true; return false; } const int dx[] = {1, -1, 0, 0, 1, -1, 1, -1}; const int dy[] = {0, 0, 1, -1, 1, 1, -1, -1}; const int N = 1e3 + 7; int n, m, q; bool a[N][N]; int cnt[N + N]; signed main() { cin.tie(0)->sync_with_stdio(0); cin >> n >> m; for (int i = 1; i <= n; i ++) { for (int j = 1; j <= m; j ++) { a[i][j] = 1; cnt[i + j] ++; } } auto rem = [&](int x, int y) { queue<pair<int, int>> q; q.emplace(x, y); while (!q.empty()) { tie(x, y) = q.front(); q.pop(); if (!a[x][y]) { continue; } a[x][y] = false; cnt[x + y] --; if (!a[x + 1][y - 1]) { q.emplace(x + 1, y); q.emplace(x, y - 1); } if (!a[x - 1][y + 1]) { q.emplace(x - 1, y); q.emplace(x, y + 1); } } }; for (int i = 1; i <= n; i ++) { for (int j = 1; j <= m; j ++) { char c; cin >> c; if (c == '1') { rem(i, j); } } } cin >> q; while (q --) { int x, y; cin >> x >> y; if (cnt[x + y] == 1 && a[x][y]) { cout << 0 << '\n'; } else { cout << 1 << '\n'; rem(x, y); } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...