제출 #146226

#제출 시각아이디문제언어결과실행 시간메모리
146226osaaateiasavtnl구경하기 (JOI13_watching)C++14
100 / 100
239 ms32092 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define ii pair <int, int> #define app push_back #define all(a) a.begin(), a.end() #define bp __builtin_popcount #define ll long long const int N = 2007, INF = 1e9 + 7; int n, p, q; int a[N], dp[N][N], r1[N], r2[N]; bool check(int m) { for (int i = 0; i < n; ++i) { r1[i] = i; while (r1[i] + 1 < n && a[r1[i] + 1] - a[i] + 1 <= m) ++r1[i]; r2[i] = i; while (r2[i] + 1 < n && a[r2[i] + 1] - a[i] + 1 <= 2 * m) ++r2[i]; } for (int i = 0; i < N; ++i) for (int j = 0; j < N; ++j) dp[i][j] = 0; for (int i = 0; i <= p; ++i) { for (int j = 0; j <= q; ++j) { if (dp[i][j] == n) return 1; dp[i + 1][j] = max(dp[i + 1][j], r1[dp[i][j]] + 1); dp[i][j + 1] = max(dp[i][j + 1], r2[dp[i][j]] + 1); } } return 0; } signed main() { #ifdef HOME freopen("input.txt", "r", stdin); #else ios_base::sync_with_stdio(0); cin.tie(0); #endif cin >> n >> p >> q; for (int i = 0; i < n; ++i) cin >> a[i]; sort(a, a + n); p = min(p, n); q = min(q, n); int l = 0, r = INF; while (l < r - 1) { int m = (l + r) >> 1; if (check(m)) r = m; else l = m; } cout << r << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...