제출 #1368563

#제출 시각아이디문제언어결과실행 시간메모리
1368563ivazivaNautilus (BOI19_nautilus)C++20
100 / 100
37 ms516 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")

using namespace std;

#define MAXN 501

int r,c,m;string s;
bitset<MAXN> a[MAXN];
bitset<MAXN> dp[MAXN];
bitset<MAXN> newdp[MAXN];

int main()
{
	cin>>r>>c>>m;
	for (int row=1;row<=r;row++)
	{
		string state;cin>>state;
		for (int col=1;col<=c;col++)
		{
			if (state[col-1]=='#') a[row][col]=0;
			else a[row][col]=1;
			dp[row][col]=a[row][col];
		}
	}
	cin>>s;
	for (int pos=0;pos<m;pos++)
	{
		for (int row=1;row<=r;row++)
		{
			if (s[pos]=='?')
			{
				if (row!=1) newdp[row-1]|=dp[row];
				if (row!=r) newdp[row+1]|=dp[row];
				newdp[row]|=(dp[row]<<1);newdp[row]|=(dp[row]>>1);
				continue;
			}
			if (s[pos]=='N' and row!=1) newdp[row-1]|=dp[row];
			if (s[pos]=='S' and row!=r) newdp[row+1]|=dp[row];
			if (s[pos]=='W') newdp[row]=(dp[row]>>1);
			if (s[pos]=='E') newdp[row]=(dp[row]<<1);
		}
		swap(dp,newdp);for (int row=1;row<=r;row++) {dp[row]&=a[row];newdp[row].reset();}
	}
	int answer=0;
	for (int row=1;row<=r;row++)
	{
		for (int col=1;col<=c;col++) answer+=dp[row][col];
	}
	cout<<answer<<endl;return 0;
}
	
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…