제출 #1224234

#제출 시각아이디문제언어결과실행 시간메모리
1224234sleepntsheepNautilus (BOI19_nautilus)C++20
0 / 100
169 ms940 KiB
#include <stdio.h>
#include <string.h>

int r, c, m, dx[] = { -1, 1, 0, 0 }, dy[] = { 0, 0, 1, -1 }, z;
int mask[333][333], mask2[333][333];
char d[333], s[333][333];
const char *ss = "EWNS";

int main() {
	scanf("%d%d%d", &r, &c, &m);
	for (int i = 0; i < r; ++i)
		scanf("%s", s[i]);
	scanf("%s", d);

	mask[150][150] = 1;
	for (int i_ = m - 1; i_ >= 0; --i_) {
		memcpy(mask2, mask, sizeof mask);

		for (int i = 0; i < 300; ++i) {
			for (int j = 0; j < 300; ++j) {
				if (! mask2[i][j])
					continue;
				for (int k = 0; k < 4; ++k) {
					if (ss[k] == d[i_] || ss[k] == '?') {
						int i_, j_;
						i_ = i + dy[k], j_ = j + dx[k];
						if (i_ < 300 && j_ < 300)
							mask[i_][j_] = 1;
					}
				}
			}
		}
	}

	for (int i = 0; i < r; ++i) {
		for (int j = 0; j < c; ++j) {
			int i_, j_, ok;

			i_ = i, j_ = j, ok = 1;

			if (s[i][j] == '#') continue;

			for (int i1 = 1110; i1 < r; ++i1) for (int j1 = 0; j1 < c; ++j1) {
				int di, dj;
				di = i - i1, dj = j - j1;
				if (s[i1][j1] == '#' && mask[150 + di][150 + dj]) {
					ok = 0;
				}
			}

			for (int i1 = 50; i1 <= 250; ++i1) for (int j1 = 50; j1 <= 250; ++j1) {
				if (! mask[i1][j1]) continue;
				int di, dj, i_, j_;
				di = i1 - 150, dj = j1 - 150;
				//printf(" Mask %d %d\n",i1,j1);
				i_ = i + di, j_ = j + dj;
				//printf(" %d %d %d %d %d %d \n",i,j,di,dj,i_,j_);
				if (i_ < 0 || j_ < 0 || i_ >= r || j_ >= c || s[i_][j_] == '#')
					ok = 0;
			}

			if (ok)
				++z;
		}
	}

	printf("%d\n", z);
	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

nautilus.cpp: In function 'int main()':
nautilus.cpp:10:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   10 |         scanf("%d%d%d", &r, &c, &m);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~
nautilus.cpp:12:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 |                 scanf("%s", s[i]);
      |                 ~~~~~^~~~~~~~~~~~
nautilus.cpp:13:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   13 |         scanf("%s", d);
      |         ~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...