Submission #1180554

#TimeUsernameProblemLanguageResultExecution timeMemory
1180554ALTAKEXEFurniture (JOI20_furniture)C++20
100 / 100
1252 ms394324 KiB
#include <bits/stdc++.h> #define ll long long #define ff first #define ss second #define pii pair<int, int> #define pb push_back #define eb emplace_back #define inf INT_MAX #define all(x) x.begin(), x.end() const int MOD = 1e9 + 7; using namespace std; vector<vector<int>> R(10002, vector<int>(10002, 1)); vector<int> L(20001, 0); void solve() { int n, m; cin >> n >> m; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { R[i][j] = 0; L[i + j]++; } } const auto ok = [&](const int X, const int Y) -> int { if (R[X][Y] == 1) { return 1; } if (L[X + Y] == 1) { return 0; } std::stack<std::pair<int, int>> st; const auto push = [&](const int x, const int y) { if (R[x][y] == 0) { R[x][y] = 1; --L[x + y]; st.emplace(x, y); } }; push(X, Y); while (!st.empty()) { const int x = st.top().first; const int y = st.top().second; st.pop(); if (R[x - 1][y + 1] == 1) { push(x - 1, y); push(x, y + 1); } if (R[x + 1][y - 1] == 1) { push(x, y - 1); push(x + 1, y); } } return 1; }; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { int z; cin >> z; if (z == 1) ok(i, j); } } int q; cin >> q; for (int i = 1; i <= q; i++) { int xx, yy; cin >> xx >> yy; cout << ok(xx, yy) << '\n'; } } int main() { int T = 1; // cin >> T; while (T--) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...