Submission #210083

#TimeUsernameProblemLanguageResultExecution timeMemory
210083pavementNautilus (BOI19_nautilus)C++17
100 / 100
185 ms856 KiB
#include <bits/stdc++.h>
using namespace std;

int N, M, L, T;
char S;
bitset<505> O[505], C1[505], C2[505], C3[505], C4[505], B[2][505];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> N >> M >> L;
	for (int i = 1; i <= N; i++) {
		O[i].reset();
		C1[i].reset();
		C2[i].reset();
		C3[i].reset();
		C4[i].reset();
		B[0][i].reset();
		B[1][i].reset();
	}
	for (int i = 1; i <= N; i++)
		for (int j = 1; j <= M; j++) {
			cin >> S;
			B[0][i][j] = O[i][j] = (S == '.');
		}
	for (int k = 1; k <= L; k++) {
		cin >> S;
		if (S == 'N') {
			for (int i = 1; i <= N; i++)
				B[k & 1][i] = B[1 - (k & 1)][i + 1];
		} else if (S == 'S') {
			for (int i = 1; i <= N; i++)
				B[k & 1][i] = B[1 - (k & 1)][i - 1];
		} else if (S == 'E') {
			for (int i = 1; i <= N; i++)
				B[k & 1][i] = B[1 - (k & 1)][i] << 1;
		} else if (S == 'W') {
			for (int i = 1; i <= N; i++)
				B[k & 1][i] = B[1 - (k & 1)][i] >> 1;
		} else {
			for (int i = 1; i <= N; i++)
				C1[i] = B[1 - (k & 1)][i + 1];
			for (int i = 1; i <= N; i++)
				C2[i] = B[1 - (k & 1)][i - 1];
			for (int i = 1; i <= N; i++)
				C3[i] = B[1 - (k & 1)][i] << 1;
			for (int i = 1; i <= N; i++)
				C4[i] = B[1 - (k & 1)][i] >> 1;
			for (int i = 1; i <= N; i++)
				B[k & 1][i] = C1[i] | C2[i] | C3[i] | C4[i];
		}
		for (int i = 1; i <= N; i++)
			B[k & 1][i] &= O[i];
	}
	for (int i = 1; i <= N; i++) T += B[L & 1][i].count();
	cout << T << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...