제출 #69336

#제출 시각아이디문제언어결과실행 시간메모리
69336chhun보물 찾기 (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...