Submission #840951

#TimeUsernameProblemLanguageResultExecution timeMemory
840951hafoNautilus (BOI19_nautilus)C++14
100 / 100
169 ms159636 KiB
#include <bits/stdc++.h> #define ll long long #define ull unsigned ll #define pb push_back #define pa pair<int, int> #define pall pair<ll, int> #define fi first #define se second #define TASK "test" #define Size(x) (int) x.size() #define all(x) x.begin(), x.end() using namespace std; template<typename T1, typename T2> bool mini (T1 &a, T2 b) {if(a > b) a = b; else return 0; return 1;} template<typename T1, typename T2> bool maxi (T1 &a, T2 b) {if(a < b) a = b; else return 0; return 1;} const int MOD = 1e9 + 7; const int LOG = 20; const int maxn = 500 + 7; const ll oo = 1e18 + 69; int n, m, k; string st; char a[maxn][maxn]; bitset<maxn> dp[5007][maxn]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); //freopen(TASK".inp", "r", stdin); //freopen(TASK".out", "w", stdout); cin>>n>>m>>k; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { cin>>a[i][j]; dp[0][i][j] = (a[i][j] == '.'); } } cin>>st; st = ' ' + st; for(int i = 1; i <= k; i++) { for(int x = 1; x <= n; x++) { if(st[i] == 'N' || st[i] == '?') { dp[i][x] |= dp[i - 1][x + 1]; } if(st[i] == 'S' || st[i] == '?') { dp[i][x] |= dp[i - 1][x - 1]; } if(st[i] == 'W' || st[i] == '?') { dp[i][x] |= (dp[i - 1][x] >> 1); } if(st[i] == 'E' || st[i] == '?') { dp[i][x] |= (dp[i - 1][x] << 1); } dp[i][x] &= dp[0][x]; } } int ans = 0; for(int i = 1; i <= n; i++) ans += dp[k][i].count(); cout<<ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...