Submission #667888

#TimeUsernameProblemLanguageResultExecution timeMemory
667888600MihneaTreasure (different grader from official contest) (CEOI13_treasure2)C++17
33 / 100
1 ms468 KiB
#include "treasure.h" #include <bits/stdc++.h> using namespace std; const int N = 100 + 7; int s[4][N][N], s2[N][N]; bool deja = 0; bool ok; int n; int get(int type, int r, int c) { if (type == 0) { if (r <= 0 || c <= 0) { return 0; } ok &= (s[type][r][c] != -1); return s[type][r][c]; } if (type == 1) { if (r <= 0 || c > n) { return 0; } ok &= (s[type][r][c] != -1); return s[type][r][c]; } assert(0); } int what(int r, int c) { ok = 1; int sm; sm = get(0, r, c) - get(0, r - 1, c) - get(0, r, c - 1) + get(0, r - 1, c - 1); if (ok) { return sm; } ok = 1; sm = get(1, r, c) - get(1, r - 1, c) - get(1, r, c + 1) + get(1, r - 1, c + 1); if (ok) { return sm; } cout << "bad " << r << " " << c << "\n"; return 0; /// assert(0); } void findTreasure(int nn) { n = nn; for (int k = 0; k < 4; k++) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { s[k][i][j] = -1; } } } assert(deja == 0); deja = 1; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (j <= n / 2 + 1) { s[1][i][j] = countTreasure(1, j, i, n); } if (j >= n / 2 - 1) { s[0][i][j] = countTreasure(1, 1, i, j); } } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (what(i, j)) { Report(i, j); } } } }
#Verdict Execution timeMemoryGrader output
Fetching results...