Submission #414158

#TimeUsernameProblemLanguageResultExecution timeMemory
414158600MihneaCultivation (JOI17_cultivation)C++17
30 / 100
541 ms632 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define int ll ll max(ll a, signed b) { if (a > b) return a; return b; } const int N = 300 + 7; const int INF = (int) 1e18 + 7; int dimx, dimy, n; struct point { int x; int y; }; point v[N]; vector<int> cover[N]; signed main() { ios::sync_with_stdio(0); cin.tie(0); ///freopen ("input", "r", stdin); cin >> dimx >> dimy >> n; for (int i = 1; i <= n; i++) { cin >> v[i].x >> v[i].y; } assert(dimx <= 40); int sol = INF; for (int a = 0; a <= dimx; a++) { for (int b = 0; b <= dimx; b++) { /// fix north, south for (int i = 1; i <= dimx; i++) { cover[i].clear(); } for (int i = 1; i <= n; i++) { int l = max(1, v[i].x - a), r = min(dimx, v[i].x + b); for (int j = l; j <= r; j++) { cover[j].push_back(i); } } bool ok = 1; for (int i = 1; i <= dimx; i++) { if (cover[i].empty()) { ok = 0; break; } } if (!ok) { continue; } /// now it's a pretty easy task /// For each row I have some restrictions int r1 = 0, r2 = 0, rsum = 0; for (int i = 1; i <= dimx; i++) { vector<int> pts; for (auto &j : cover[i]) { pts.push_back(v[j].y); } sort(pts.begin(), pts.end()); r1 = max(r1, pts[0] - 1); r2 = max(r2, dimy - pts.back()); for (int j = 1; j < (int) pts.size(); j++) { rsum = max(rsum, pts[j] - pts[j - 1] - 1); } } rsum = max(rsum, r1 + r2); sol = min(sol, a + b + rsum); } } cout << sol << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...