제출 #390972

#제출 시각아이디문제언어결과실행 시간메모리
390972ForTrainNautilus (BOI19_nautilus)C++14
100 / 100
645 ms1092 KiB
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define pb push_back
#define ppb pop_back
#define x first
#define y second
#define int long long
#define mp make_pair
#define cmpl complex <long double>

using namespace std;

const int sz = 5e5;

signed main (){
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    int n, m, k;
    char x;
    cin >> n >> m >> k;
    bitset <sz> ans, pos1, pos2, p, temp;
    for (int i = 0; i < n; ++i){
        for (int j = 0; j < m; ++j){
            cin >> x;
            if (x == '.') ans[i * m + j] = 1;
            p[i * m + j] = ans[i * m + j];
            pos1[i * m + j] = (j != 0);
            pos2[i * m + j] = (j != m - 1);
        }
    }
    int res = 0;
    string s;
    cin >> s;
    for (int i = 0; i < k; ++i){
        temp = ans;
        ans.reset();
        if (s[i] == 'S' || s[i] == '?') ans |= (temp << m);
        if (s[i] == 'N' || s[i] == '?') ans |= (temp >> m);
        if (s[i] == 'E' || s[i] == '?') ans |= (temp << 1) & pos1;
        if (s[i] == 'W' || s[i] == '?') ans |= (temp >> 1) & pos2;
        ans = ans & p;
    }
    for (int i = 0; i < n; ++i){
        for (int j = 0; j < m; ++j){
            res += ans[i * m + j];
        }
    }
    cout << res;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...