Submission #1294854

#TimeUsernameProblemLanguageResultExecution timeMemory
1294854arashmemarCultivation (JOI17_cultivation)C++20
0 / 100
1 ms572 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 310; bool operator < (pair <int, int> a, pair <int, int> b) { return a.first < b.first or (a.first == b.first and a.second < b.second); } bool operator > (pair <int, int> a, pair <int, int> b) { return a.first > b.first or (a.first == b.first and a.second > b.second); } bool operator <= (pair <int, int> a, pair <int, int> b) { return a.first < b.first or (a.first == b.first and a.second <= b.second); } bool operator >= (pair <int, int> a, pair <int, int> b) { return a.first > b.first or (a.first == b.first and a.second >= b.second); } bool operator == (pair <int, int> a, pair <int, int> b) { return a.first == b.first and a.second == b.second; } pair <int, int> a[maxn]; vector <int> rs; int ml[maxn], mr[maxn], mg[maxn]; bool v(int i, int j, int k) { pair <int, int> t1, t2, t3; t1 = {ml[i], i}; t2 = {ml[j], j}; t3 = {ml[k], k}; if (t1 < t2 or t1 < t3) { return 0; } t1 = {mr[i], i}; t2 = {mr[j], j}; t3 = {mr[k], k}; if (t2 < t1 or t2 < t3) { return 0; } t1 = {mg[i], i}; t2 = {mg[j], j}; t3 = {mg[k], k}; if (t3 < t2 or t1 > t3) { return 0; } return 1; } bool act(int i, int l, int r, int g) { int ln = max(0, ml[i] - l), rn = max(0, mr[i] - r); if (l + ln + r + rn > max(l + r, g)) { return 0; } if (mg[i] > max(l + r, g)) { return 0; } return 1; } int main() { int ans = 2e9; int r, c; cin >> r >> c; int n; cin >> n; for (int i = 1;i <= n;i++) { cin >> a[i].first >> a[i].second; } sort(a + 1, a + n + 1); rs.push_back(0); for (int i = 1;i <= n;i++) { if (a[i].first != rs.back()) { rs.push_back(a[i].first); } ml[i] = -1; } for (int k = 1;k <= n;k++) { int i = a[k].first, j = a[k].second; int p = lower_bound(rs.begin(), rs.end(), i) - rs.begin(); if (ml[p] == -1) { ml[p] = j - 1; mr[p] = c - j; continue; } mg[p] = max(mg[p], mr[p] - (c - j) - 1); mr[p] = c - j; } for (int i = 1;i < rs.size();i++) { for (int j = 1;j < rs.size();j++) { for (int k = 1;k < rs.size();k++) { if (!v(i, j, k)) { continue; } int cl = ml[i], cr = mr[j], cg = mg[k]; int ll = -1, lr = 0, lg = 0; for (int i = 1;i < rs.size();i++) { if (!act(i, cl, cr, cg)) { continue; } if (ll == -1) { ll = rs[i] - 1; lr = r - rs[i]; continue; } lg = max(lg, lr - (r - rs[i]) - 1); lr = r - rs[i]; } ans = min(ans, max(cg, cl + cr) + max(lg, ll + lr)); } } } cout << ans; }
#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...