제출 #1143224

#제출 시각아이디문제언어결과실행 시간메모리
1143224am_aadvik구경하기 (JOI13_watching)C++20
50 / 100
1094 ms29256 KiB
#include<iostream> #include<vector> #include<algorithm> using namespace std; bool comp(pair<int, int> a, int v) {return a.first < v;} int main() { int n, p, q; cin >> n >> p >> q; if ((p + q) >= n) { cout << 1; return 0; } vector<pair<int, int>> a(n); for (int i = 0; i < n; ++i) cin >> a[i].first; sort(a.begin(), a.end()); for (int i = 0; i < n; ++i) a[i].second = i; int s = 0, e = 1e9, ans = -1; while (s <= e) { int w = (s + e) / 2; vector<vector<vector<bool>>> dp; dp.assign(p + 1, vector<vector<bool>>(q + 1, vector<bool>(n + 1, 0))); for (int cp = 0; cp <= p; ++cp) for (int cq = 0; cq <= q; ++cq) for (int i = n - 1; i >= 0; --i) { if (cp > 0) { auto it = lower_bound(a.begin(), a.end(), a[i].first + w, comp); if (it == a.end()) dp[cp][cq][i] = 1; else dp[cp][cq][i] = dp[cp - 1][cq][(*it).second]; } if (cq > 0) { auto it = lower_bound(a.begin(), a.end(), a[i].first + w + w, comp); if (it == a.end()) dp[cp][cq][i] = 1; else dp[cp][cq][i] = (dp[cp][cq][i] || (bool)(dp[cp][cq - 1][(*it).second])); } } if (dp[p][q][0]) ans = w, e = w - 1; else s = w + 1; } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...