제출 #449923

#제출 시각아이디문제언어결과실행 시간메모리
449923zxcvbnmNautilus (BOI19_nautilus)C++14
66 / 100
41 ms1436 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
char mat[105][105];
bool vis[105][105][105];
int n, m, k;
string str;
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
#define NORTH 0
#define EAST 1
#define SOUTH 2
#define WEST 3
bool isValid(int x, int y) {
    if (x >= n || x < 0 || y >= m || y < 0) return false;
    if (mat[x][y] == '#') return false;
    return true;
}
void go(int curr, int x, int y) {
    if (!isValid(x, y) || vis[curr][x][y]) return;
    vis[curr][x][y] = true;
    if (curr == k) return;

    if (str[curr] == '?') {
        for(int i = 0; i < 4; i++) {
            int nx = x + dx[i];
            int ny = y + dy[i];
            if (isValid(nx, ny)) {
                go(curr+1, nx, ny);
            }
        }
    } else {
        switch(str[curr]) {
        case 'N':
            go(curr+1, x+dx[NORTH], y+dy[NORTH]);
            break;
        case 'E':
            go(curr+1, x+dx[EAST], y+dy[EAST]);
            break;
        case 'S':
            go(curr+1, x+dx[SOUTH], y+dy[SOUTH]);
            break;
        case 'W':
            go(curr+1, x+dx[WEST], y+dy[WEST]);
            break;
        }
    }
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> m >> k;
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            cin >> mat[i][j];
        }
    }
    cin >> str;

    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            go(0, i, j);
        }
    }

    int cnt = 0;
//    for(int i = 0; i < n; i++) {
//        for(int j = 0; j < m; j++) {
//            cout << vis[k][i][j] << " ";
//        }
//        cout << "\n";
//    }

    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            cnt += vis[k][i][j];
        }
    }
    cout << cnt << "\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...