제출 #69336

#제출 시각아이디문제언어결과실행 시간메모리
69336chhunTreasure (different grader from official contest) (CEOI13_treasure2)C++14
32 / 100
4 ms672 KiB
//#include <stdio.h>
#include "treasure.h"
int n,cnt,fullcnt;
int mat[105][105];
bool vi[105][105];
bool sf(int x, int y) {
	return (x >= 1 && y >= 1 && x <= n && y <= n);
}
void find_(int l, int r, int x) {
	//printf("%d %d %d\n", x, l, r);
	if (r - l + 1 != n && cnt == 0)return;
	if (!sf(x, l) || !sf(x, r))return;
	if (r - l + 1 <= 0)return;
	int count_ = countTreasure(x, l, x, r);
	if (r - l + 1 == n)cnt = count_;
	if (count_ == 0)return;
	if (r - l + 1 == count_) {
		for (int i = l; i <= r; i++) {
			mat[x][i] = 1;
			cnt--;
			fullcnt--;
		}
		return;
	}
	if (r - l + 1 == 1) {
		return;
	}
	if (fullcnt == 0)return;
	find_(l, (l + r) / 2, x);
	if (fullcnt == 0)return;
	if (cnt == 0)return;
	find_((l + r) / 2 + 1, r, x);
	return;
}
void findTreasure(int N) {
	n = N;
	fullcnt = countTreasure(1, 1, n, n);
	for (int i = 1; i <= n; i++)
		for (int j = 1; j < n; j++)
			mat[i][j] = 0;
	for (int i = 1; i <= N; i++) {
		if(fullcnt!=0)
			find_(1, n, i);
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (mat[i][j] == 1)Report(i, j);
			//printf("%d", mat[i][j]);
		}//printf("\n");
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...