Submission #946497

#TimeUsernameProblemLanguageResultExecution timeMemory
946497promitheasNautilus (BOI19_nautilus)C++14
100 / 100
216 ms1084 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 cpy_bl(bitset<MAXC>* d, bitset<MAXC>* s, int c) { for (int i = 0; i < c; ++i) d[i] = s[i]; } void or_bl(bitset<MAXC>* d, bitset<MAXC>* s, int c) { for (int i = 0; i < c; ++i) d[i] |= s[i]; } 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; ++r) BCUR[r].reset(); north(); or_bl(BCUR, NCUR, R); south(); or_bl(BCUR, NCUR, R); east(); or_bl(BCUR, NCUR, R); west(); or_bl(NCUR, 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-c-1, RAWDAT[r][c] == '.'); } } for (int r = 0; r < R; ++r) CUR[r] = SEA[r]; scanf(" %s", Q); #ifdef DEBUG for (int i = 0; i < R; ++i) { printf("%9s\n", CUR[i].to_string().c_str()); } #endif for (int i = 0; i < M; ++i) { move(Q[i]); #ifdef DEBUG printf("\n\n"); for (int i = 0; i < R; ++i) { printf("%9s\n", CUR[i].to_string().c_str()); } #endif } int c = 0; for (int i = 0; i < R; ++i) { c += CUR[i].count(); } printf("%d\n", c); }

Compilation message (stderr)

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