Submission #100523

#TimeUsernameProblemLanguageResultExecution timeMemory
100523saleparkTreasure (different grader from official contest) (CEOI13_treasure2)C++14
0 / 100
3 ms384 KiB
#include "treasure.h"
bool visit[101][101];
void go(int a, int b, int N) {
	if (N == 0) {
		return;
	}
	int n = countTreasure(a, b, a - 1 + N, b - 1 + N);
	if (n == N * N) {
		for (int i = a; i < a + N; i++) {
			for (int j = b; j < b + N; j++) {
				visit[i][j] = 1;
			}
		}
	}
	else {
		go(a, b, N / 2);
	}
	n = countTreasure(a, b + N - 1, a - 1 + N, b - 1 + (2 * N));
	if (n == N * N) {
		for (int i = a; i < a + N; i++) {
			for (int j = b + N - 1; j < b + (2 * N); j++) {
				visit[i][j] = 1;
			}
		}
	}
	else go(a, b + N - 1, N / 2);
	n = countTreasure(a + N - 1, b, a - 1 + (2 * N), b - 1 + N);
	if (n == N * N) {
		for (int i = a + N - 1; i < a + (2 * N); i++) {
			for (int j = b; j < b + N; j++) {
				visit[i][j] = 1;
			}
		}
	}
	else go(a + N - 1, b, N / 2);
	n = countTreasure(a + N - 1, b + N - 1, a - 1 + (2 * N), b - 1 + (2 * N));
	if (n == N * N) {
		for (int i = a + N - 1; i < a + (2 * N); i++) {
			for (int j = b + N - 1; j < b + (2 * N); j++) {
				visit[i][j] = 1;
			}
		}
	}
	else go(a + N - 1, b + N - 1, N / 2);
}
void findTreasure (int N) {
	int cnt = countTreasure(1, 1, N, N);
	if (cnt == 0) return;
	else if (cnt == N * N) {
		for (int i = 1; i <= N; i++) {
			for (int j = 1; j <= N; j++) {
				Report(i, j);
			}
		}
	}
	else go(1, 1, N / 2);
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			if (visit[i][j] == 1) Report(i, j);
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...