답안 #496362

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
496362 2021-12-21T06:25:17 Z Ziel Nautilus (BOI19_nautilus) C++17
66 / 100
6 ms 3584 KB
/**
 * LES GREATEABLES BRO TEAM
**/

#include <bits/stdc++.h>

using namespace std;

using ll = long long;
#define sz(x) (int)x.size()
const bool FLAG = false;
void setIO(const string &f = "");

#define int ll

bool dp[110][110][112];

void solve() {
    int r, c, m;
    cin >> r >> c >> m;
    vector<vector<char>> a(r + 1, vector<char>(c + 1));
    for (int i = 1; i <= r; i++) {
    	for (int j = 1; j <= c; j++) {
    		cin >> a[i][j];
    	}
    }
    string s;
    cin >> s;
    auto in_frame = [r, c](int x, int y) -> bool {
    	return x >= 1 && x <= r && y >= 1 && y <= c;
    };
	for (int k = 0; k <= m; k++) {
		for (int i = 1; i <= r; i++) {
			for (int j = 1; j <= c; j++) {
				if (k == 0) {
					if (a[i][j] == '.')
						dp[i][j][k] = true;
				} else {
					if (a[i][j] == '#') {
						dp[i][j][k] = false;
						continue;
					}
					if (s[k - 1] == '?') {
						if (in_frame(i - 1, j))
							dp[i][j][k] |= dp[i - 1][j][k - 1];
						if (in_frame(i + 1, j))
							dp[i][j][k] |= dp[i + 1][j][k - 1];
						if (in_frame(i, j - 1))
							dp[i][j][k] |= dp[i][j - 1][k - 1];
						if (in_frame(i, j + 1))
							dp[i][j][k] |= dp[i][j + 1][k - 1];
					} else if (s[k - 1] == 'N' && in_frame(i + 1, j)) {
						dp[i][j][k] |= dp[i + 1][j][k - 1];
					} else if (s[k - 1] == 'S' && in_frame(i - 1, j)) {
						dp[i][j][k] |= dp[i - 1][j][k - 1];
					} else if (s[k - 1] == 'E' && in_frame(i, j - 1)) {
						dp[i][j][k] |= dp[i][j - 1][k - 1];
					} else if (s[k - 1] == 'W' && in_frame(i, j + 1)) {
						dp[i][j][k] |= dp[i][j + 1][k - 1];
					}
				}
			}
		}
	}
	int ans = 0;
	for (int i = 1; i <= r; i++) {
		for (int j = 1; j <= c; j++) {
			ans += dp[i][j][m];
		}
	}
	cout << ans;
}

signed main() {
    setIO();
    
    int tt = 1;
    if (FLAG) {
    	cin >> tt;
    }
    while (tt--) {
    	solve();
    }
    
    return 0;
}

void setIO(const string &f) {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    if (fopen((f + ".in").c_str(), "r")) {
        freopen((f + ".in").c_str(), "r", stdin);
        freopen((f + ".out").c_str(), "w", stdout);
    }
}

Compilation message

nautilus.cpp: In function 'void setIO(const string&)':
nautilus.cpp:92:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   92 |         freopen((f + ".in").c_str(), "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nautilus.cpp:93:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   93 |         freopen((f + ".out").c_str(), "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1540 KB Output is correct
2 Correct 5 ms 1484 KB Output is correct
3 Correct 6 ms 1484 KB Output is correct
4 Correct 6 ms 1484 KB Output is correct
5 Correct 5 ms 1540 KB Output is correct
6 Correct 3 ms 1488 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1540 KB Output is correct
2 Correct 5 ms 1484 KB Output is correct
3 Correct 6 ms 1484 KB Output is correct
4 Correct 6 ms 1484 KB Output is correct
5 Correct 5 ms 1540 KB Output is correct
6 Correct 3 ms 1488 KB Output is correct
7 Correct 3 ms 1484 KB Output is correct
8 Correct 6 ms 1484 KB Output is correct
9 Correct 6 ms 1484 KB Output is correct
10 Correct 4 ms 1484 KB Output is correct
11 Correct 2 ms 1484 KB Output is correct
12 Correct 4 ms 1536 KB Output is correct
13 Correct 5 ms 1484 KB Output is correct
14 Correct 6 ms 1484 KB Output is correct
15 Correct 4 ms 1484 KB Output is correct
16 Correct 4 ms 1484 KB Output is correct
17 Correct 4 ms 1484 KB Output is correct
18 Correct 6 ms 1540 KB Output is correct
19 Correct 6 ms 1544 KB Output is correct
20 Correct 4 ms 1484 KB Output is correct
21 Correct 3 ms 1484 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1540 KB Output is correct
2 Correct 5 ms 1484 KB Output is correct
3 Correct 6 ms 1484 KB Output is correct
4 Correct 6 ms 1484 KB Output is correct
5 Correct 5 ms 1540 KB Output is correct
6 Correct 3 ms 1488 KB Output is correct
7 Correct 3 ms 1484 KB Output is correct
8 Correct 6 ms 1484 KB Output is correct
9 Correct 6 ms 1484 KB Output is correct
10 Correct 4 ms 1484 KB Output is correct
11 Correct 2 ms 1484 KB Output is correct
12 Correct 4 ms 1536 KB Output is correct
13 Correct 5 ms 1484 KB Output is correct
14 Correct 6 ms 1484 KB Output is correct
15 Correct 4 ms 1484 KB Output is correct
16 Correct 4 ms 1484 KB Output is correct
17 Correct 4 ms 1484 KB Output is correct
18 Correct 6 ms 1540 KB Output is correct
19 Correct 6 ms 1544 KB Output is correct
20 Correct 4 ms 1484 KB Output is correct
21 Correct 3 ms 1484 KB Output is correct
22 Runtime error 5 ms 3584 KB Execution killed with signal 11
23 Halted 0 ms 0 KB -