제출 #679641

#제출 시각아이디문제언어결과실행 시간메모리
679641vjudge1Nautilus (BOI19_nautilus)C++17
100 / 100
251 ms159948 KiB
#define taskname "Nautilus" #include <bits/stdc++.h> using namespace std; const int maxn = 510 * 510; int r, c, m; bitset<maxn> dp[5010], le, ri, lle, rri; inline int cal(int x, int y) {return (x-1) * c + y;} signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin>>r>>c>>m; char cc; for (int i=1; i<=r; i++) for (int j=1; j<=c; j++) { cin>>cc; int id = cal(i, j); if (cc == '.') dp[0].set(id), le.set(id), ri.set(id); if (j == 1) le.reset(id), lle.set(id); if (j == m) ri.reset(id), rri.set(id); } for (int i=1; i<=m; i++) { cin>>cc; if (cc == 'N') dp[i] = dp[i-1] >> c; else if (cc == 'S') dp[i] = dp[i-1] << c; else if (cc == 'W') { bitset<maxn> tmp = dp[i-1] & le; dp[i] = (tmp >> 1); } else if (cc == 'E') { bitset<maxn> tmp = dp[i-1] << 1; dp[i] = tmp & le; } else { dp[i] = (dp[i-1] >> c) | (dp[i-1] << c); bitset<maxn> tmp = dp[i-1] << 1; dp[i] |= (tmp & le); tmp = dp[i-1] & le; dp[i] |= (tmp >> 1); // dp[i] |= ((dp[i-1] >> 1) & ri) | ((dp[i-1] << 1) & le); } dp[i] &= dp[0]; // cerr<<i<<" "<<dp[i].count()<<" "<<dp[0].count()<<"\n"; } cout<<dp[m].count(); } /** 5 9 7 ...##.... ..#.##..# ..#....## .##...#.. ....#.... ES?EE?? **/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...