This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "bits/stdc++.h"
using namespace std;
void fast() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
}
void ran() {
srand(chrono::steady_clock::now().time_since_epoch().count());
}
long long get_rand() {
long long a = rand();
long long b = rand();
return a * (RAND_MAX + 1ll) + b;
}
// #define endl '\n'
// #define double long double
// #define int long long
// int MOD = 1000 * 1000 * 1000;
// int MOD = 998244353;
const int MXN = 505, MXT = 1005;
bitset<MXN> sea[MXN], inr[MXN];
int n, m, k;
bitset<MXN> dp[MXN][MXT];
signed main() {
ran(); fast();
for (int i=0; i<MXN; i++) {
for (int j=0; j<MXN; j++) {
sea[i][j] = 0;
inr[i][j] = 0;
dp[i][j] = 0;
}
}
cin >> n >> m >> k;
for (int i=0; i<n; i++) {
string s;
cin >> s;
for (int j=0; j<m; j++) {
if (s[j] == '.') sea[i][j] = dp[i][0][j] = true;
inr[i][j] = true;
}
}
string s;
cin >> s;
int f = 0;
for (auto x: s) {
if (x == 'E') {
for (int i=0; i<n; i++) {
dp[i][f+1] = (dp[i][f] << 1) & sea[i];
}
}
else if (x == 'W') {
for (int i=0; i<n; i++) {
dp[i][f+1] = (dp[i][f] >> 1) & sea[i];
}
}
else if (x == 'N') {
for (int i=0; i<n; i++) {
if (i == n-1) {
// empty line
dp[i][f+1] = sea[MXN-1];
}
else {
// normal
dp[i][f+1] = dp[i+1][f] & sea[i];
}
}
}
else if (x == 'S') {
for (int i=0; i<n; i++) {
if (i == 0) {
// empty line
dp[i][f+1] = sea[MXN-1];
}
else {
// normal
dp[i][f+1] = dp[i-1][f] & sea[i];
}
}
}
else {
// any
for (int i=0; i<n; i++) {
if (i == 0) {
dp[i][f+1] = (dp[i+1][f] | (dp[i][f] << 1) | (dp[i][f] >> 1)) & sea[i];
}
else if (i == n-1) {
dp[i][f+1] = (dp[i-1][f] | (dp[i][f] << 1) | (dp[i][f] >> 1)) & sea[i];
}
else {
dp[i][f+1] = (dp[i+1][f] | dp[i-1][f] | (dp[i][f] << 1) | (dp[i][f] >> 1)) & sea[i];
}
}
}
f++;
}
int x = 0;
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
if (dp[i][f][j]) x++;
}
}
cout << x << endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |