Submission #69333

#TimeUsernameProblemLanguageResultExecution timeMemory
69333chhunTreasure (different grader from official contest) (CEOI13_treasure2)C++14
22 / 100
3 ms620 KiB
#include "treasure.h" int n, cnt; 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 (cnt == 0)return; if (!sf(x, l) || !sf(x, r))return; if (r < 1 || l>n)return; if (r - l + 1 <= 0)return; int count_ = countTreasure(x, l, x, r); if (count_ == 0)return; if (r - l + 1 == count_) { for (int i = l; i <= r; i++) { mat[x][i] = 1; cnt--; } return; } if (r - l + 1 == 1) { return; } find_(l, (l + r) / 2, x); if (cnt == 0)return; find_((l + r) / 2 + 1, r, x); return; } void find_2(int x,int y,int si) { //printf("->%d %d %d\n", x, y, si); if (!sf(x, y))return; int six = 0; int siy = 0; for (int i = x; i < x+si && i<=n; i++)six++; for (int i = y; i<y+si&&i <= n; i++)siy++; int count_ = countTreasure(x, y, x + six-1, y + siy - 1); if (si <= 2 && count_>0) { cnt = count_; for(int i=x;i<x+si;i++) find_(y, y + si-1, i); return; } if (count_ == 0)return; int ran = 0; for (int i = x; i <= n && i < x + si; i++) for (int j = y; j <= n && j < y + si; j++) ran++; if (count_ == ran) { for (int i = x; i <= n && i < x + si; i++) for (int j = y; j <= n && j < y + si; j++) mat[i][j] = 1; return; } find_2(x, y, ((si + 1) / 2)); find_2(x+((si + 1) / 2), y, ((si + 1) / 2)); find_2(x, y + ((si + 1) / 2), ((si + 1) / 2)); find_2(x + ((si + 1) / 2), y + ((si + 1) / 2), ((si + 1) / 2)); return; } void findTreasure(int N) { 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++) { // cnt = countTreasure(i,1,i,n); // find_(1, n, i); //} find_2(1, 1, n); 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...