# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1157524 | DangKhoizzzz | Nautilus (BOI19_nautilus) | C++20 | 159 ms | 158816 KiB |
#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair <int , int>
#define arr3 array <int , 3>
using namespace std;
const int INF = 1e18 + 7;
const int maxn = 2e5 + 7;
int H , W , n;
bitset <502> dp[5005][505];
char s[5005] , a[505][505];
bitset <502> mark[505];
void solve()
{
cin >> H >> W >> n;
for(int i = 1; i <= H; i++)
{
for(int j = 1; j <= W; j++)
{
cin >> a[i][j];
if(a[i][j] == '.')
{
mark[i][j] = 1;
}
}
}
for(int i = 1; i <= n; i++) cin >> s[i];
for(int i = 1; i <= H; i++)
{
for(int j = 1; j <= W; j++)
{
if(a[i][j] == '.') dp[0][i][j] = 1;
}
}
for(int k = 1; k <= n; k++)
{
for(int i = 1; i <= H; i++)
{
if(s[k] == 'E' || s[k] == '?') dp[k][i] |= (dp[k-1][i] << 1);
if(s[k] == 'W' || s[k] == '?') dp[k][i] |= (dp[k-1][i] >> 1);
if(s[k] == 'N' || s[k] == '?') dp[k][i] |= (dp[k-1][i+1]);
if(s[k] == 'S' || s[k] == '?') dp[k][i] |= (dp[k-1][i-1]);
dp[k][i] &= mark[i];
}
}
int ans = 0;
for(int i = 1; i <= H; i++)
{
for(int j = 1; j <= W; j++)
{
ans += dp[n][i][j];
}
}
cout << ans << '\n';
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
solve();
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |