제출 #218180

#제출 시각아이디문제언어결과실행 시간메모리
218180pichulia보물 찾기 (CEOI13_treasure2)C++11
44 / 100
5 ms512 KiB
#include "treasure.h" //#include"header.h" int result[10009][4]; int rl; void dfs(int remain, int si, int ei, int sj, int ej) { if (ei < si)return; if (ej < sj)return; if (remain == (ei - si + 1) * (ej - sj + 1)) { result[rl][0] = si; result[rl][1] = ei; result[rl][2] = sj; result[rl][3] = ej; rl++; return; } if (remain == 0) { return; } int mi = (si + ei) / 2; int mj = (sj + ej) / 2; int ab = countTreasure(si + 1, sj + 1, ei + 1, mj + 1); int ac = countTreasure(si + 1, sj + 1, mi + 1, ej + 1); int aa = countTreasure(si + 1, sj + 1, mi + 1, mj + 1); dfs(aa, si, mi, sj, mj); dfs(ab - aa, mi + 1, ei, sj, mj); dfs(ac - aa, si, mi, mj+1, ej); dfs(remain - ab - ac + aa, mi + 1, ei, mj + 1, ej); } void findTreasure(int N) { int cnt = countTreasure(1, 1, N, N); if (cnt == 0)return; else { rl = 0; dfs(cnt, 0, N - 1, 0, N - 1); while (rl--) { for (int i = result[rl][0]; i <= result[rl][1]; i++) { for (int j = result[rl][2]; j <= result[rl][3]; j++) { Report(i + 1, j + 1); } } } } }
#Verdict Execution timeMemoryGrader output
Fetching results...