Submission #535253

#TimeUsernameProblemLanguageResultExecution timeMemory
535253groshiNautilus (BOI19_nautilus)C++17
100 / 100
170 ms1092 KiB
#include<iostream>
#include<bitset>
using namespace std;
bitset<600> dp[2][600],usun[600];
char t[600][600];
int main()
{
    cin.tie(0);
    cout.tie(0);
    ios_base::sync_with_stdio(0);
    int n,m,k;
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>t[i][j];
            if(t[i][j]=='.')
            {
                dp[1][i][j]=1;
                usun[i][j]=1;
            }
        }
    }
    string s;
    cin>>s;
    for(int i=0;i<k;i++)
    {
        for(int j=1;j<=n;j++)
            dp[i%2][j]&=0;
        if(s[i]=='?' || s[i]=='N')
            for(int j=1;j<n;j++)
                dp[i%2][j]|=dp[!(i%2)][j+1];
        if(s[i]=='?' || s[i]=='S')
            for(int j=2;j<=n;j++)
                dp[i%2][j]|=dp[!(i%2)][j-1];
        if(s[i]=='W' || s[i]=='?')
            for(int j=1;j<=n;j++)
                dp[i%2][j]|=(dp[!(i%2)][j]>>1);
        if(s[i]=='E' || s[i]=='?')
            for(int j=1;j<=n;j++)
                dp[i%2][j]|=(dp[!(i%2)][j]<<1);
        for(int j=1;j<=n;j++)
            dp[i%2][j]&=usun[j];
    }
    int wynik=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(dp[(k-1)%2][i][j])
                wynik++;
    cout<<wynik;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...