Submission #1033496

#TimeUsernameProblemLanguageResultExecution timeMemory
1033496vjudge1Furniture (JOI20_furniture)C++17
5 / 100
5077 ms14936 KiB
#include<bits/stdc++.h> using namespace std; #pragma GCC optimize(2) bitset<1010> reach[1010], open[1010]; int n,m; bool check(){ reach[0][1]=1; for(int i=1;i<=m;i++) { reach[i]=reach[i-1]&open[i]; for(int j=2;j<=n;j++) if(open[i][j]&&reach[i][j-1]) reach[i][j]=1; } return reach[m][n]; } int X[1000100],Y[1000100],fail[1000100]; int state; void moveto(int nxt){ while(state<nxt) state++,open[X[state]][Y[state]]=0; while(state>nxt) open[X[state]][Y[state]]=1,state--; } int main(){ cin.tie(0)->sync_with_stdio(0); int q; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ int x; cin>>x; open[j][i]=!x; } reach[0][1]=1; for(int i=1;i<=m;i++) { reach[i]=reach[i-1]&open[i]; for(int j=2;j<=n;j++) if(open[i][j]&&reach[i][j-1]) reach[i][j]=1; } cin>>q; for(int i=1;i<=q;i++) cin>>Y[i]>>X[i]; int prv=0; while(moveto(q),!check()) { int l=prv+1,r=q; int res=0; while(l<=r){ int mid=l+r>>1; moveto(mid); if(check()) l=mid+1; else r=mid-1,res=mid; } moveto(res); open[X[res]][Y[res]]=1; fail[res]=1; prv=res; } for(int i=1;i<=q;i++) cout<<!fail[i]<<'\n'; }

Compilation message (stderr)

furniture.cpp: In function 'int main()':
furniture.cpp:49:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   49 |             int mid=l+r>>1;
      |                     ~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...