Submission #480158

#TimeUsernameProblemLanguageResultExecution timeMemory
480158pure_memNautilus (BOI19_nautilus)C++14
100 / 100
205 ms812 KiB
#include <iostream>
#include <bitset>
#include <cmath>
#include <cassert>

#define X first
#define Y second
#define ll long long 
#define MP make_pair

using namespace std;

const int N = 501, INF = 1e8;
const ll mod = 1e9 + 7;

int n, m, q;
string Q;
bitset<N*N> dp, res, mask; 

void prints() {
	for(int i = 1;i <= n;i++) {
		for(int j = 1;j <= m;j++) {
			cout << dp[i * N + j];
		}
		cout << "\n";
	}
	cout << "\n";
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);

	cin >> n >> m >> q;
	for(int i = 1;i <= n;i++)
		for(int j = 1;j <= m;j++) {
			char x;
			cin >> x;
			dp[i * N + j] = (x != '#');
			mask[i * N + j] = (x != '#');
		}
	cin >> Q;
	for(int i = 0;i < q;i++) {
		res.reset();
		if(Q[i] == 'N' || Q[i] == '?')
			res |= dp >> N;
		if(Q[i] == 'S' || Q[i] == '?')
			res |= dp << N;
		if(Q[i] == 'W' || Q[i] == '?')
			res |= dp >> 1;
		if(Q[i] == 'E' || Q[i] == '?')
			res |= dp << 1;
		dp = res & mask;
	}
	cout << dp.count();
	return 0;
}


#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...