Submission #1146255

#TimeUsernameProblemLanguageResultExecution timeMemory
1146255ace5Furniture (JOI20_furniture)C++20
100 / 100
213 ms10304 KiB
#include <bits/stdc++.h> using namespace std; vector<vector<int>> a; vector<vector<int>> r; vector<int> rs; vector<pair<int,int>> d = {{1,0},{0,1},{0,-1},{-1,0}}; int sfr(int i,int j) { return ((i < 0 || i >= a.size() || j < 0 || j >= a[0].size()) ? 0 : r[i][j]); } void dfs(int i,int j) { //cout << i << ' ' << j << endl; if(i < 0 || i >= a.size() || j < 0 || j >= a[0].size() || r[i][j] == 0) return; int y = 0; if(sfr(i-1,j) == 0 && sfr(i,j-1) == 0 && i+j > 0) { y =1; } if(sfr(i+1,j) == 0 && sfr(i,j+1) == 0 && i+j+2 < a.size() + a[0].size()) { y =1; } if(!y) return ; //cout << i << ' ' << j << endl; r[i][j] = 0; rs[i+j] --; for(int k = 0;k < 4;++k) dfs(i+d[k].first,j+d[k].second); } bool block(int i,int j) { if(rs[i+j] == 1 && r[i][j] == 1) { return false; } else { if(r[i][j] == 0) { a[i][j] = 1; return true; } a[i][j] = 1; r[i][j] = 0; rs[i+j]--; for(int k = 0;k < 4;++k) dfs(i+d[k].first,j+d[k].second); return true; } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n,m; cin >> n >> m; a.resize(n); r.resize(n); rs.resize(n+m-1); for(int j = 0;j < n;++j) { a[j].resize(m); r[j].resize(m); for(int u = 0;u < m;++u) { a[j][u] = 0; r[j][u] = 1; rs[j+u]++; } } for(int i = 0;i < n;++i) { for(int j = 0;j < m;++j) { int x; cin >> x; if(x == 1) { block(i,j); } } } int q; cin >> q; while(q--) { int i,j; cin >> i >> j; i--; j--; cout << (block(i,j) ? 1 : 0) << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...