Submission #1235621

#TimeUsernameProblemLanguageResultExecution timeMemory
1235621denislavNautilus (BOI19_nautilus)C++20
100 / 100
120 ms540 KiB
# include <iostream>
# include <bitset>
using namespace std;

const int S=500,MAX=5e3+11;

int n,m,q;
char ori[MAX];
bitset<S> b[2][S];
bitset<S> ocean[S];
int f(int x) {return x&1;}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);

    cin>>n>>m>>q;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            char x;
            cin>>x;
            if(x=='.') ocean[i][j]=1;
        }
    }
    for(int i=1;i<=q;i++) cin>>ori[i];

    for(int i=0;i<n;i++) b[f(0)][i]=ocean[i];
    for(int t=1;t<=q;t++)
    {
        for(int i=0;i<n;i++) b[f(t)][i].reset();
        if(ori[t]=='N' or ori[t]=='?')
        {
            for(int i=0;i<n-1;i++) b[f(t)][i]|=b[f(t-1)][i+1];
        }
        if(ori[t]=='S' or ori[t]=='?')
        {
            for(int i=1;i<n;i++) b[f(t)][i]|=b[f(t-1)][i-1];
        }
        if(ori[t]=='E' or ori[t]=='?')
        {
            for(int i=0;i<n;i++) b[f(t)][i]|=(b[f(t-1)][i]<<1);
        }
        if(ori[t]=='W' or ori[t]=='?')
        {
            for(int i=0;i<n;i++) b[f(t)][i]|=(b[f(t-1)][i]>>1);
        }

        for(int i=0;i<n;i++) b[f(t)][i]&=ocean[i];
    }

    int ans=0;
    for(int i=0;i<n;i++) ans+=b[f(q)][i].count();
    cout<<ans<<"\n";

    return 0;
}



#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...