Submission #292585

#TimeUsernameProblemLanguageResultExecution timeMemory
292585kshitij_sodaniFurniture (JOI20_furniture)C++14
100 / 100
397 ms18168 KiB
#include <bits/stdc++.h> using namespace std; typedef long long llo; #define mp make_pair #define pb push_back #define a first #define b second #define endl '\n' int n,m; int it[1001][1001]; int vis[1001][1001]; int vis2[1001][1001]; int val[1001][1001]; int co[3001]; int cal(int i,int j){ int co=0; if(i+1<n){ co+=val[i+1][j]; } if(j+1<m){ co+=val[i][j+1]; } return co; } int cal2(int i,int j){ int co=0; if(i>0){ co+=val[i-1][j]; } if(j>0){ co+=val[i][j-1]; } return co; } void dfs(int aa,int bb){ val[aa][bb]=0; co[aa+bb]-=1; if(aa>0){ if(val[aa-1][bb]){ if(cal(aa-1,bb)==0){ dfs(aa-1,bb); } } } if(bb>0){ if(val[aa][bb-1]){ if(cal(aa,bb-1)==0){ dfs(aa,bb-1); } } } } void dfs2(int aa,int bb){ val[aa][bb]=0; co[aa+bb]-=1; if(aa<n-1){ if(val[aa+1][bb]){ if(cal2(aa+1,bb)==0){ dfs2(aa+1,bb); } } } if(bb<m-1){ if(val[aa][bb+1]){ if(cal2(aa,bb+1)==0){ dfs2(aa,bb+1); } } } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n>>m; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>it[i][j]; } } vis[n-1][m-1]=1; for(int i=n-1;i>=0;i--){ for(int j=m-1;j>=0;j--){ if(i==n-1 and j==m-1){ continue; } if(it[i][j]==0){ if(i<n-1){ vis[i][j]|=vis[i+1][j]; } if(j<m-1){ vis[i][j]|=vis[i][j+1]; } } } } vis2[0][0]=1; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(it[i][j]==1){ continue; } if(i==0 and j==0){ continue; } if(i>0){ vis2[i][j]|=vis2[i-1][j]; } if(j>0){ vis2[i][j]|=vis2[i][j-1]; } } } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(vis2[i][j] and vis[i][j]){ val[i][j]=1; co[i+j]+=1; } } } int q; cin>>q; while(q--){ int aa,bb; cin>>aa>>bb; aa--; bb--; if(val[aa][bb]==0){ cout<<1<<endl; continue; } if(co[aa+bb]==1){ cout<<0<<endl; continue; } else{ dfs(aa,bb); dfs2(aa,bb); co[aa+bb]+=1; cout<<1<<endl; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...