#include <bits/stdc++.h>
using namespace std;
const int N = 2e3 + 10;
int n, p, q, a[N];
bool check(int w) {
int dp[n + 10][n + 10] = {};
memset(dp, 63, sizeof dp);
dp[0][0] = 0;
int p1 = 0, p2 = 0;
for (int i = 0; i < n; i++) {
while (p1 < n && a[p1] - a[i] < w)
p1++;
while (p2 < n && a[p2] - a[i] < w * 2)
p2++;
for (int j = 0; j < n + 10; j++) {
// if (w == 3) cout << i << ' ' << j << ' ' << dp[i][j] << '\n';
dp[p1][j] = min(dp[p1][j], dp[i][j] + 1);
if (j + 1 < n + 10)
dp[p2][j + 1] = min(dp[p2][j + 1], dp[i][j]);
}
}
// for (int j = 0; j < n + 10; j++)
// if (w == 3) cout << n << ' ' << j << ' ' << dp[n][j] << '\n';
for (int i = 0; i <= q; i++)
if (dp[n][i] <= p)
return true;
return false;
}
void input() {
cin >> n >> p >> q;
for (int i = 0; i < n; i++)
cin >> a[i];
}
void solve() {
sort(a, a + n);
if (p + q >= n) {
cout << 1 << '\n';
return;
}
int l = 0, r = 1e9 + 10;
while (r - l > 1) {
int mid = (l + r) / 2;
// cout << l << ' ' << r << ' ' << mid << endl;
if (check(mid)) r = mid;
else l = mid;
}
cout << r;
}
int main() {
ios:: sync_with_stdio(0), cin.tie(0), cout.tie(0);
input();
solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |