제출 #94706

#제출 시각아이디문제언어결과실행 시간메모리
94706newyearTreasure (different grader from official contest) (CEOI13_treasure2)C++14
0 / 100
1081 ms263168 KiB
#include "treasure.h" int map[100][100]; void finding(int r1, int c1, int r2, int c2, int size, int remain) { int cnt = 0; if (remain == 0) return; else if (remain == size*size) { for (int i = r1; i <= r2; i++) for (int j = c1; j <= c2; j++) { if (map[i][j]) continue; Report(i, j); map[i][j] = 1; } } if (size == 2) { int tmp, temp, cnt = 0; tmp = countTreasure(r1, c1, r1, c1); if (tmp) { cnt++; if (!map[r1][c1]) { Report(r1, c1); map[r1][c1] = 1; } } if (cnt == remain) return; temp = countTreasure(r1, c1, r1, c1 + 1); if (temp - cnt > 0) { cnt++; if (!map[r1][c1 + 1]) { Report(r1, c1 + 1); map[r1][c1 + 1] = 1; } } if (cnt == remain) return; temp = countTreasure(r1, c1, r1 + 1, c1); if (temp - cnt > 0) { cnt++; if (!map[r1+1][c1]) { Report(r1+1, c1); map[r1+1][c1] = 1; } } if (cnt == remain) return; if (!map[r1 + 1][c1 + 1]) { Report(r1 + 1, c1 + 1); map[r1 + 1][c1 + 1] = 1; } return; } int r = r1, c = c1; int tmp = countTreasure(r, r + size / 2, c, c + size / 2); cnt += tmp; finding(r, r + size / 2, c, c + size / 2, size / 2, remain - tmp); if (cnt == remain) return; r = r1, c = c1 + size / 2; tmp = countTreasure(r, r + size - size / 2, c, c + size - size / 2); cnt += tmp; finding(r, r + size - size / 2, c, c + size - size / 2, size - size / 2, remain - tmp); if (cnt == remain) return; r = r1 + size / 2, c = c1; tmp = countTreasure(r, r + size - size / 2, c, c + size - size / 2); cnt += tmp; finding(r, r + size - size / 2, c, c + size - size / 2, size - size / 2, remain - tmp); if (cnt == remain) return; r = r1 + size - size / 2, c = c1 + size - size / 2; tmp = countTreasure(r, r + size / 2, c, c + size / 2); finding(r, r + size / 2, c, c + size / 2, size / 2, remain - tmp); } void findTreasure (int N) { int tmp = countTreasure(1, 1, N, N); finding(1, 1, N, N, N, tmp); }
#Verdict Execution timeMemoryGrader output
Fetching results...