Submission #1239398

#TimeUsernameProblemLanguageResultExecution timeMemory
1239398nikolashamiNautilus (BOI19_nautilus)C++20
100 / 100
30 ms332 KiB
#include<bits/stdc++.h>
using namespace std;
using ll=long long;

#pragma GCC optimize("O3")

const ll N=503;
bitset<N>a[N],f[N],nf[N];

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    ll n,m,k;
    cin>>n>>m>>k;

    for(int i=0;i<=n+1;++i)
        f[i].reset(),nf[i].reset();

    for(int i=1;i<=n;++i){
        for(int j=1;j<=m;++j){
            char c;cin>>c;
            f[i][j]=a[i][j]=(c=='.');
        }
    }

    string s;
    cin>>s;
    s='.'+s;

    for(int j=1;j<=k;++j){
        for(int i=1;i<=n;++i){
            if(s[j]=='N')nf[i]|=a[i]&f[i+1];
            if(s[j]=='E')nf[i]|=a[i]&(f[i]<<1);
            if(s[j]=='S')nf[i]|=a[i]&f[i-1];
            if(s[j]=='W')nf[i]|=a[i]&(f[i]>>1);
            if(s[j]=='?')nf[i]|=a[i]&(f[i+1]|(f[i]<<1)|f[i-1]|(f[i]>>1));
        }
        for(int i=1;i<=n;++i)
            f[i]=nf[i],nf[i].reset();
    }

    ll ans=0;
    for(int i=1;i<=n;++i)
        ans+=f[i].count();

    cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...