Submission #94842

#TimeUsernameProblemLanguageResultExecution timeMemory
94842wogns1026보물 찾기 (CEOI13_treasure2)C++14
0 / 100
2 ms376 KiB
#include "treasure.h"

struct Node {
	int x;
	int y;
};

Node ans[10001];
int idx = 0;

void func(int x1, int y1, int x2, int y2) {
	if (x1 == x2 && y1 == y2) {
		ans[idx].x = x1;
		ans[idx].y = y1;
		idx++;
		return;
	}
	
	if (countTreasure(x1, y1, x2 / 2, y2 / 2) != 0)
		func(x1, y1, x2 / 2, y2 / 2);
	if (countTreasure(x1, y1 / 2 + 1, x2 / 2, y2))
		func(x1, y2 / 2 + 1, x2 / 2, y2);
	if (countTreasure(x1 / 2 + 1, y1, x2, y2 / 2))
		func(x2 / 2 + 1, y1, x2, y2 / 2);
	if (countTreasure(x1 / 2 + 1, y2 / 2 + 1, x2, y2))
		func(x2 / 2 + 1, y2 / 2 + 1, x2, y2);
}

void findTreasure(int N) {
	/*int num = 0;
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			if (i <= N / 2 && j <= N / 2) {
				num = countTreasure(i, j, N, N) - (countTreasure(i + 1, j, N, N) + countTreasure(i, j + 1, N, N)) + countTreasure(i + 1, j + 1, N, N);
				if (num)
					ans[idx].x = i, ans[idx].y = j, idx++;
			}
			else if (i <= N / 2 && j > N / 2) {
				num = countTreasure(i, 1, N, j) - (countTreasure(i + 1, 1, N, j) + countTreasure(i, 1, N, j - 1)) + countTreasure(i + 1, 1, N, j - 1);
				if (num)
					ans[idx].x = i, ans[idx].y = j, idx++;
			}
			else if (i > N / 2 && j <= N / 2) {
				num = countTreasure(1, j, i, N) - (countTreasure(1, j, i - 1, N) + countTreasure(1, j + 1, i, N)) + countTreasure(1, j + 1, i - 1, N);
				if (num)
					ans[idx].x = i, ans[idx].y = j, idx++;
			}
			else if (i > N / 2 && j > N / 2) {
				num = countTreasure(1, 1, i, j) - (countTreasure(1, 1, i - 1, j) + countTreasure(1, 1, i, j - 1)) + countTreasure(1, 1, i - 1, j - 1);
				if (num)
					ans[idx].x = i, ans[idx].y = j, idx++;
			}
		}
	}*/
	func(1, 1, N, N);

	for (int i = 0; i < idx; i++) {
		Report(ans[i].x, ans[i].y);
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...