Submission #1171737

#TimeUsernameProblemLanguageResultExecution timeMemory
1171737AlgorithmWarriorNautilus (BOI19_nautilus)C++20
100 / 100
202 ms1288 KiB
#include <bits/stdc++.h> using namespace std; int n,m,sz; char sir[5005],mat[505][505]; bitset<250005>dp,ok,up,down,lft,rght; void read(){ cin>>n>>m>>sz; int i,j; for(i=0;i<n;++i) for(j=0;j<m;++j){ cin>>mat[i][j]; if(mat[i][j]=='.') ok[i*m+j]=1; if(i>0) up[i*m+j]=1; if(i<n-1) down[i*m+j]=1; if(j>0) lft[i*m+j]=1; if(j<m-1) rght[i*m+j]=1; } for(i=0;i<sz;++i) cin>>sir[i]; } int get_dp(){ dp=ok; int i; for(i=0;i<sz;++i){ if(sir[i]=='N') dp=(((dp&up)>>m)&ok); if(sir[i]=='S') dp=(((dp&down)<<m)&ok); if(sir[i]=='W') dp=(((dp&lft)>>1)&ok); if(sir[i]=='E') dp=(((dp&rght)<<1)&ok); if(sir[i]=='?') dp=((((dp&up)>>m)|((dp&down)<<m)|((dp&lft)>>1)|((dp&rght)<<1))&ok); } return dp.count(); } int main() { read(); cout<<get_dp(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...