제출 #1213440

#제출 시각아이디문제언어결과실행 시간메모리
1213440minhpkNautilus (BOI19_nautilus)C++20
100 / 100
210 ms157208 KiB
#include <bits/stdc++.h>

using namespace std;
bitset<505> dp[505][5005];
bitset<505> sea[505];
string s;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int a,b,c;
    cin >> a >> b >> c;
    for (int i=a;i>=1;i--){
         for (int j=b;j>=1;j--){
              char c;
              cin >> c;
              if (c=='.'){
                  sea[i][j]=1;
              }else{
                  sea[i][j]=0;
              }
         }
    }
    string s;
    cin >> s;
    s='#'+s;
    for (int i=1;i<=a;i++){
         dp[i][0]=sea[i];
    }

    for (int j=1;j<=c;j++){
         if (s[j]=='N'){
             for (int i=1;i<=a;i++){
                  dp[i][j]= dp[i-1][j-1]&sea[i];
             }
         }else if (s[j]=='S'){
             for (int i=1;i<=a;i++){
                  dp[i][j]= dp[i+1][j-1]&sea[i];
             }
         }else if (s[j]=='W'){
             for (int i=1;i<=a;i++){
                  dp[i][j]= (dp[i][j-1]<<1)&sea[i];
             }
         }else if (s[j]=='E'){
             for (int i=1;i<=a;i++){
                  dp[i][j]= (dp[i][j-1]>>1)&sea[i];
             }
         }else{
            for (int i=1;i<=a;i++){
                  dp[i][j]= ((dp[i][j-1]>>1)|(dp[i][j-1]<<1)|dp[i+1][j-1]|dp[i-1][j-1])&sea[i];
            }
         }
    }

    int ans=0;
    for (int i=1;i<=a;i++){
         for (int j=1;j<=b;j++){
             ans+=dp[i][c][j];
         }
    }

    cout << ans << "\n";





    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...