제출 #1358037

#제출 시각아이디문제언어결과실행 시간메모리
1358037kutomei3Nautilus (BOI19_nautilus)C++20
66 / 100
128 ms327680 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int n, m, k;
    cin >> n >> m >> k;

    char arr[n][m];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> arr[i][j];
        }
    }

    string s;
    cin >> s;

    int dp[k + 1][n][m];
    for (int p = 0; p <= k; p++) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (p == 0 && arr[i][j] != '#') dp[p][i][j] = 1;
                else dp[p][i][j] = 0;
            }
        }
    }

    int di[4] = {0, 0, -1, 1};
    int dj[4] = {1, -1, 0, 0};
    for (int p = 0; p < k; p++) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (dp[p][i][j] == 0) continue;
                if (s[p] != '?') {
                    char sp = s[p];
                    int ci = i, cj = j;
                    if (sp == 'W') cj--;
                    if (sp == 'S') ci++;
                    if (sp == 'N') ci--;
                    if (sp == 'E') cj++;
                    if (ci < 0 || ci >= n || cj < 0 || cj >= m || arr[ci][cj] == '#') continue;
                    dp[p + 1][ci][cj] = 1;
                } else {
                    for (int l = 0; l < 4; l++) {
                        int ci = i + di[l];
                        int cj = j + dj[l];
                        if (ci < 0 || ci >= n || cj < 0 || cj >= m || arr[ci][cj] == '#') continue;
                        dp[p + 1][ci][cj] = 1;
                    }
                }
            }
        }
        // for (int i = 0; i < n; i++) {
        //     for (int j = 0; j < m; j++) {
        //         cout << dp[p][i][j] << ' ';
        //     }
        //     cout << '\n';
        // }
        // cout << '\n';
    }

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

    int ct = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            ct += dp[k][i][j];
        }
    }

    cout << ct;

    return 0;
}

/*
1 1 1
.
N
*/
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…