# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
996579 | 2024-06-10T20:26:33 Z | MilosMilutinovic | 보물 찾기 (CEOI13_treasure2) | C++14 | 0 ms | 0 KB |
#include "treasure.h" #include <bits/stdc++.h> using namespace std; vector<pair<int, int>> sol; void solve(int xl, int xr, int yl, int yr, int total) { if (xl == xr && yl == yr) { sol.emplace_back(xl, yl); return; } int lx = xr - xl, ly = yr - yl; if (lx > ly) { int mid = (xl + xr) / 2; int t = countTreasure(xl, mid, yl, yr); if (t != 0) { solve(xl, mid, yl, yr, t); } if (t != total) { solve(mid + 1, xr, yl, yr, total - t); } } else { int mid = (yl + yr) / 2; int t = countTreasure(xl, xr, yl, mid); if (t != 0) { solve(xl, xr, yl, mid, t); } if (t != total) { solve(xl, xr, mid + 1, yr, t - total); } } } void findTreasure(int N) { sol.clear(); solve(1, N, 1, N); int cnt = countTreasure(1, 1, N, N); for (auto& p : sol) { Report(p.first, p.second); } }