제출 #496488

#제출 시각아이디문제언어결과실행 시간메모리
496488ergaganNautilus (BOI19_nautilus)C++17
100 / 100
371 ms178604 KiB
//я так много думал, что опять попал #include <bits/stdc++.h> #define all(x) x.begin(),x.end() #define pb push_back #define ppb pop_back #define pf push_front #define ppf pop_front #define f first #define s second #define left(v) v + v #define right(v) v + v + 1 #define ub upper_bound #define lb lower_bound using namespace std; typedef long long ll; //17 SEVENTEEN const long double Pi = acos(-1.0); const ll dx[] = {0,0,1,-1}; const ll dy[] = {1,-1,0,0}; const ll N = (ll) 1e6 + 17; const ll M = (ll) 5e2 + 69; const ll inf = (ll) 1e14 + 3; const ll mod = (ll) 1e9 + 7; ll sq(ll x) { return x * x; } ll zxc = 1, n, m, sz, ans; char c; bitset<M> dp[M][M * 10]; void solve() { cin >> n >> m >> sz; for(ll i = 1; i <= n; i++) { for(ll j = 1; j <= m; j++) { cin >> c; if(c == '#') dp[i][0][j] = 0; else dp[i][0][j] = 1; } } for(ll k = 1; k <= sz; k++) { cin >> c; for(ll i = 1; i <= n; i++) { dp[i][k] = dp[i][0]; if(c == 'N') dp[i][k] &= dp[i + 1][k - 1]; if(c == 'S') dp[i][k] &= dp[i - 1][k - 1]; if(c == 'W') dp[i][k] &= (dp[i][k - 1] >> 1); if(c == 'E') dp[i][k] &= (dp[i][k - 1] << 1); if(c == '?') dp[i][k] &= ((dp[i - 1][k - 1] | dp[i + 1][k - 1]) | ((dp[i][k - 1] << 1) | (dp[i][k - 1] >> 1))); // cout << dp[i][k] << " "; } // cout << "\n"; } for(ll i = 1; i <= n; i++) { ans += dp[i][sz].count(); } cout << ans; } /* 5 9 7 ...##.... ..#.##..# ..#....## .##...#.. ....#.... WSWEENN */ int main(/*Уверенно*/) { ios_base::sync_with_stdio(0); cin.tie(0); /* freopen(".in", "r", stdin); freopen(".out", "w", stdout); */ // cin >> zxc; while(zxc--) { solve(); } return 0; } // さよならさ いかなくちゃ
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...