Submission #1152127

#TimeUsernameProblemLanguageResultExecution timeMemory
1152127dobri_okeNautilus (BOI19_nautilus)C++20
100 / 100
117 ms792 KiB
//#pragma GCC target ("avx2")   
//#pragma GCC optimize ("Ofast")

#include <bits/stdc++.h>   
using namespace std;

#define int long long  
#define F first 
#define S second 
#define pb push_back

const int N = 1e6+100, NN=26, mod=1e9+7;

int dp[N];

signed main(){   
    
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int n, m, k;
    
    cin >> n >> m >> k;
    
    char a[n + 1][m + 1];
    
    bitset < 501 > b[n + 6], b1[n + 6], b2[n + 6];
    
    for(int i = 1 ; i <= n ; ++i) {
        for(int j = 1 ; j <= m ; ++j) {
            
            cin >> a[i][j];
            
            if(a[i][j] == '.') b[i][j] = 1;
        }
        b2[i] = b[i];
    }
    
    string s;
    
    cin >> s;
    
    for(int o = 0 ; o < k ; ++o) {
        
        if(s[o] == 'W') {
            
            for(int i = 1 ; i <= n ; ++i){
                b1[i] = (b[i]>>1);
                b1[i] &= b2[i];
                b[i] = b1[i];
            }
            
        }
        
        if(s[o] == 'E') {
            
            for(int i = 1 ; i <= n ; ++i){
                b1[i] = (b[i]<<1);
                b1[i] &= b2[i];
                b[i] = b1[i];
            }
            
        }
        
        if(s[o] == 'S') {
            
            for(int i = 1 ; i <= n ; ++i) {
                
                b1[i] = b[i - 1];
                
                b1[i] &= b2[i];
                
            }
            
            for(int i = 1 ; i <= n ; ++i) {
                
                b[i] = b1[i];
                
            }
            
        }
        
        if(s[o] == 'N') {
            
            for(int i = 1 ; i <= n ; ++i) {
                
                b1[i] = b[i + 1];
                
                b1[i] &= b2[i];
                
            }
            
            for(int i = 1 ; i <= n ; ++i) {
                
                b[i] = b1[i];
                
            }
            
        }
        
        if(s[o] == '?') {
            
            for(int i = 1 ; i <= n ; ++i) { 
                b1[i] = ((b[i] >> 1)|(b[i]<<1)|(b[i+1])|(b[i-1]));
                b1[i] &= b2[i];
            }
            for(int i=1;i<=n;i++) b[i]=b1[i];
        }
        
    }
    
    int ans=0;
    
    for(int i = 1 ; i <= n ; ++i) {
        for(int j = 1 ; j <= m ; ++j) ans+=b[i][j];
    }
    
    cout << ans;
    
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...