Submission #1341830

#TimeUsernameProblemLanguageResultExecution timeMemory
1341830WarinchaiNautilus (BOI19_nautilus)C++20
66 / 100
1095 ms3652 KiB
#include<bits/stdc++.h>
using namespace std;

string s[505];
string dir;
int dp[2][505][505];
int val[505][505];

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int r,c,m;cin>>r>>c>>m;
    for(int i=0;i<r;i++)cin>>s[i];
    for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)val[i][j]=(s[i-1][j-1]=='.'?1:0);
    cin>>dir;
    int cur=0;
    for(int j=1;j<=r;j++)for(int k=1;k<=c;k++)dp[0][j][k]=val[j][k];
    for(int i=0;i<m;i++){
        cur^=1;
        if(dir[i]=='N')for(int j=1;j<=r;j++)for(int k=1;k<=c;k++)dp[cur][j][k]=dp[cur^1][j+1][k];
        else if(dir[i]=='S')for(int j=1;j<=r;j++)for(int k=1;k<=c;k++)dp[cur][j][k]=dp[cur^1][j-1][k];
        else if(dir[i]=='E')for(int j=1;j<=r;j++)for(int k=1;k<=c;k++)dp[cur][j][k]=dp[cur^1][j][k-1];
        else if(dir[i]=='W')for(int j=1;j<=r;j++)for(int k=1;k<=c;k++)dp[cur][j][k]=dp[cur^1][j][k+1];
        else for(int j=1;j<=r;j++)for(int k=1;k<=c;k++)dp[cur][j][k]=(dp[cur^1][j+1][k]|dp[cur^1][j-1][k]|dp[cur^1][j][k-1]|dp[cur^1][j][k+1]);
        for(int j=1;j<=r;j++)for(int k=1;k<=c;k++)dp[cur][j][k]&=val[j][k];
    }
    int cnt=0;
    for(int j=1;j<=r;j++)for(int k=1;k<=c;k++)cnt+=dp[cur][j][k];
    cout<<cnt<<"\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...