Submission #1223024

#TimeUsernameProblemLanguageResultExecution timeMemory
1223024AlgorithmWarriorFurniture (JOI20_furniture)C++20
100 / 100
1108 ms4428 KiB
#include <bits/stdc++.h> using namespace std; int const NMAX=1005; bool drum1[NMAX][NMAX],drum2[NMAX][NMAX]; int n,m; void read(){ cin>>n>>m; int i,j; for(i=1;i<=n;++i) for(j=1;j<=m;++j){ bool val; cin>>val; drum1[i][j]=drum2[i][j]=!val; } } int diag[2*NMAX]; bool check1(int l,int c){ return (drum1[l-1][c]|drum1[l][c-1]); } bool check2(int l,int c){ return (drum2[l+1][c]|drum2[l][c+1]); } void init(){ int i,j; for(i=1;i<=n;++i) for(j=1;j<=m;++j) if(drum1[i][j] && !(i==1 && j==1)) drum1[i][j]=check1(i,j); for(i=n;i;--i) for(j=m;j;--j) if(drum2[i][j] && !(i==n && j==m)) drum2[i][j]=check2(i,j); for(i=1;i<=n;++i) for(j=1;j<=m;++j) if(drum1[i][j] && drum2[i][j]) ++diag[i+j]; } void deactivate1(int l,int c){ if(drum2[l][c]) --diag[l+c]; drum1[l][c]=0; if(drum1[l+1][c] && !check1(l+1,c)) deactivate1(l+1,c); if(drum1[l][c+1] && !check1(l,c+1)) deactivate1(l,c+1); } void deactivate2(int l,int c){ if(drum1[l][c]) --diag[l+c]; drum2[l][c]=0; if(drum2[l-1][c] && !check2(l-1,c)) deactivate2(l-1,c); if(drum2[l][c-1] && !check2(l,c-1)) deactivate2(l,c-1); } void process_queries(){ int q; cin>>q; while(q--){ int l,c; cin>>l>>c; if(drum1[l][c] && drum2[l][c] && diag[l+c]==1){ cout<<0<<'\n'; continue; } cout<<1<<'\n'; if(drum1[l][c]) deactivate1(l,c); if(drum2[l][c]) deactivate2(l,c); } } int main() { read(); init(); process_queries(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...