Submission #1296238

#TimeUsernameProblemLanguageResultExecution timeMemory
1296238Jawad_Akbar_JJFurniture (JOI20_furniture)C++20
100 / 100
274 ms10332 KiB
#include <iostream> #include <queue> using namespace std; const int N = 1005; int n, m, q, cur, a[N][N], Lst[N][N], cnt[N<<1]; void process1(int i, int j){ ++cur; queue<pair<int,int>> Q; Q.push({i, j}); while (Q.size() > 0){ auto [r, c] = Q.front(); Q.pop(); cnt[r+c] -= !a[r][c]; a[r][c] = 1; if (Lst[r+1][c] != cur and a[r+1][c] == 0 and a[r+1][c-1] == 1) Lst[r+1][c] = cur, Q.push({r+1, c}); if (Lst[r][c+1] != cur and a[r][c+1] == 0 and a[r-1][c+1] == 1) Lst[r][c+1] = cur, Q.push({r, c+1}); } } void process2(int i, int j){ ++cur; queue<pair<int,int>> Q; Q.push({i, j}); while (Q.size() > 0){ auto [r, c] = Q.front(); Q.pop(); cnt[r+c] -= !a[r][c]; a[r][c] = 1; if (Lst[r-1][c] != cur and a[r-1][c] == 0 and a[r-1][c+1] == 1) Lst[r-1][c] = cur, Q.push({r-1, c}); if (Lst[r][c-1] != cur and a[r][c-1] == 0 and a[r+1][c-1] == 1) Lst[r][c-1] = cur, Q.push({r, c-1}); } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n>>m; for (int i=0;i<N;i++) a[0][i] = a[n+1][i] = a[i][0] = a[i][m+1] = 1; for (int i=1;i<=n;i++){ for (int j=1, c;j<=m;j++){ cnt[i+j]++; cin>>c; if (c and a[i][j] == 0){ process1(i, j); process2(i, j); } } } cin>>q; for (int i=1;i<=q;i++){ int r, c; cin>>r>>c; if (a[r][c] == 1 or cnt[r+c] > 1){ cout<<"1\n"; process1(r, c); process2(r, c); } else cout<<"0\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...