제출 #1203811

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

using namespace std;
const int NMAX=500;
int n, m, c;
bitset <NMAX+5> mat[NMAX+5];
bitset <NMAX+5> dp[2][NMAX+5];
int main ()
{
    ios_base :: sync_with_stdio (0);
    cin.tie (nullptr);
    cin >> n >> m >> c;
    for (int i=1;i<=n;i++)
    {
        string input;
        cin >> input;
        for (int j=1;j<=m;j++)
        {
            mat[i][j]=(input[j-1]=='#'?0:1);
            dp[0][i][j]=(input[j-1]=='#'?0:1);
        }
    }
    string input;
    cin >> input;
    int t=0;
    for (int i=1;i<=c;i++)
    {
        t=!t;
        for (int i=1;i<=n;i++)
        {
            dp[t][i]=0;
        }
        char ch=input[i-1];
        if (ch=='E' || ch=='?')
        {
            for (int i=1;i<=n;i++)
            {
                dp[t][i] |=((dp[!t][i] << 1) & mat[i]);
            }
        }
        if (ch=='W' || ch=='?')
        {
            for (int i=1;i<=n;i++)
            {
                dp[t][i] |=((dp[!t][i] >> 1) & mat[i]);
            }
        }
        if (ch=='N' || ch=='?')
        {
            for (int i=1;i<=n;i++)
            {
                dp[t][i] |=(dp[!t][i+1] & mat[i]);
            }
        }
        if (ch=='S' || ch=='?')
        {
            for (int i=1;i<=n;i++)
            {
                dp[t][i] |=(dp[!t][i-1] & mat[i]);
            }
        }
    }
    int rez=0;
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=m;j++)
        {
            rez +=(dp[t][i][j]==1);
        }
    }
    cout << rez;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...