# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
946482 | 2024-03-14T17:06:43 Z | promitheas | Nautilus (BOI19_nautilus) | C++14 | 1 ms | 348 KB |
//BOI 2019 NAUTILUS #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <bitset> #define MAXR 550 #define MAXC 550 #define MAXM 5500 using namespace std; int R, C, M; char RAWDAT[MAXR][MAXC]; bitset < MAXC > SEA[MAXR]; bitset < MAXC > CUR[MAXR]; bitset < MAXC > NCUR[MAXR]; bitset < MAXC > BCUR[MAXR]; void west() { for (int r = 0; r < R; ++r) NCUR[r] = (CUR[r] << 1) & SEA[r]; } void east() { for (int r = 0; r < R; ++r) { NCUR[r] = (CUR[r] >> 1) & SEA[r]; NCUR[r].reset(C); } } void north() { for (int r = 1; r < R; ++r) NCUR[r - 1] = CUR[r] & SEA[r - 1]; NCUR[R - 1].reset(); } void south() { for (int r = 0; r < R - 1; ++r) { NCUR[r + 1] = CUR[r] & SEA[r + 1]; } NCUR[0].reset(); } void anymove() { for (int r = 0; r < R - 1; ++r) BCUR[r].reset(); north(); for (int r = 0; r < R - 1; ++r) BCUR[r] |= NCUR[r]; south(); for (int r = 0; r < R - 1; ++r) BCUR[r] |= NCUR[r]; east(); for (int r = 0; r < R - 1; ++r) BCUR[r] |= NCUR[r]; west(); for (int r = 0; r < R - 1; ++r) NCUR[r] |= BCUR[r]; } void move(char c) { switch (c) { case 'N': north(); break; case 'W': west(); break; case 'S': south(); break; case 'E': east(); break; case '?': anymove(); break; } for (int r = 0; r < R; ++r) CUR[r] = NCUR[r]; } char Q[MAXM]; int main() { (void)scanf("%d%d%d", &R, &C, &M); for (int r = 0; r < R; ++r) { (void)scanf(" %s", RAWDAT[r]); for (int c = 0; c < C; ++c) { SEA[r].set(c, RAWDAT[r][c] == '.'); } } for (int r = 0; r < R; ++r) CUR[r] = SEA[r]; scanf(" %s", Q); for (int i = 0; i < M; ++i) { move(Q[i]); } int c = 0; for (int i = 0; i < R; ++i) { //printf("%9s\n", CUR[i].to_string().c_str()); c += CUR[i].count(); } printf("%d\n", c); }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 348 KB | Output is correct |
2 | Incorrect | 0 ms | 348 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 348 KB | Output is correct |
2 | Incorrect | 0 ms | 348 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 348 KB | Output is correct |
2 | Incorrect | 0 ms | 348 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |