제출 #522217

#제출 시각아이디문제언어결과실행 시간메모리
522217blueNautilus (BOI19_nautilus)C++17
100 / 100
173 ms968 KiB
#include <iostream> #include <bitset> #include <algorithm> using namespace std; const int mx = 500; int main() { bitset<(mx+2) * (mx+2)> grid, DP0, DP1; grid.reset(); int R, C, M; cin >> R >> C >> M; for(int i = 1; i <= R; i++) { for(int j = 1; j <= C; j++) { char c; cin >> c; if(c == '.') grid.set((mx+2) * i + j); } } // cerr << "\n"; // for(int i = 0; i < (mx+2)*(mx+2); i++) // { // cerr << grid[i]; // if(i % (mx+2) == mx+1) cerr << '\n'; // } string S; cin >> S; // reverse(S.b DP0 = grid; for(char c : S) { // cerr << "\n\n\n c = " << c << '\n'; if(c == 'N') DP1 = (DP0 >> (mx+2)); else if(c == 'S') DP1 = (DP0 << (mx+2)); else if(c == 'W') DP1 = (DP0 >> 1); else if(c == 'E') DP1 = (DP0 << 1); else { DP1 = (DP0 << (mx+2)) | (DP0 >> (mx+2)) | (DP0 << 1) | (DP0 >> 1); } DP1 &= grid; // for(int i = 0; i < (mx+2)*(mx+2); i++) // { // if(grid[i] == 0) cerr << "#"; // else cerr << DP0[i]; // if(i % (mx+2) == mx+1) cerr << '\n'; // } // cerr << "\n---->\n"; // for(int i = 0; i < (mx+2)*(mx+2); i++) // { // if(grid[i] == 0) cerr << "#"; // else cerr << DP1[i]; // if(i % (mx+2) == mx+1) cerr << '\n'; // } swap(DP0, DP1); } cout << DP0.count() << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...