Submission #946482

#TimeUsernameProblemLanguageResultExecution timeMemory
946482promitheasNautilus (BOI19_nautilus)C++14
0 / 100
1 ms348 KiB
//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 (stderr)

nautilus.cpp: In function 'int main()':
nautilus.cpp:83:13: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   83 |  (void)scanf("%d%d%d", &R, &C, &M);
      |        ~~~~~^~~~~~~~~~~~~~~~~~~~~~
nautilus.cpp:85:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   85 |   (void)scanf(" %s", RAWDAT[r]);
      |         ~~~~~^~~~~~~~~~~~~~~~~~
nautilus.cpp:92:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   92 |  scanf(" %s", Q);
      |  ~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...