제출 #211812

#제출 시각아이디문제언어결과실행 시간메모리
211812origami100Nautilus (BOI19_nautilus)C++11
100 / 100
225 ms768 KiB
#include <bits/stdc++.h>
using namespace std;
int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int r, c, m;
	cin >> r >> c >> m;
	bitset <505> grid[505], dp[505], pre[505];
	for(int i = 1; i <= r; i++){
		string s;
		cin >> s;
		for(int j = 1; j <= c; j++){
			if(s[j - 1] == '.'){
				grid[i][j] = 1;
				dp[i][j] = 1;
				pre[i][j] = 1;
			}else{
				grid[i][j] = 0;
				dp[i][j] = 0;
				pre[i][j] = 0;
			}
			//cout << dp[i][j];
		}
		//cout << '\n';
	}
	//cout << '\n';
	for(int i = 0; i < m; i++){
		char ins;
		cin >> ins;
		switch(ins){
			case 'N':
				for(int j = 1; j <= r; j++){
					dp[j] = pre[j + 1] & grid[j];
				}
				break;
			case 'S':
				for(int j = 1; j <= r; j++){
					dp[j] = pre[j - 1] & grid[j];
				}
				break;
			case 'W':
				for(int j = 1; j <= r; j++){
					dp[j] = (pre[j] >> 1) & grid[j];
				}
				break;
			case 'E':
				for(int j = 1; j <= r; j++){
					dp[j] = (pre[j] << 1) & grid[j];
				}
				break;
			case '?':
				for(int j = 1; j <= r; j++){
					dp[j] = (pre[j + 1] | pre[j - 1] | (pre[j] << 1) | (pre[j] >> 1)) & grid[j];
				}
				break;
		}
		for(int j = 1; j <= r; j++){
			pre[j] = dp[j];
		}
		/*for(int j = 1; j <= r; j++){
			for(int k = 1; k <= c; k++){
				cout << dp[j][k];
			}
			cout << '\n';
		}
		cout << '\n';*/
	}
	int cnt = 0;
	for(int i = 1; i <= r; i++){
		for(int j = 1; j <= c; j++){
			if(dp[i][j] == 1) cnt++;
		}
	}
	cout << cnt;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...