#include <bits/stdc++.h>
using namespace std;
const int nx = 2e3+5;
int n, p, q, l = 0, r = 1e9;
int dp[nx][nx], s[nx], b[nx];
vector<int> event(nx);
bool check(int w)
{
for(int i=1;i<=n;i++)
{
s[i] = upper_bound(event.begin() + 1, event.begin() + n + 1, event[i] - w) - event.begin();
b[i] = upper_bound(event.begin() + 1, event.begin() + n + 1, event[i] - 2 * w) - event.begin();
}
dp[0][0] = 0;
for(int i=1;i<=n;i++)
{
dp[i][0] = dp[b[i] - 1][0] + 1;
for (int j=1;j<=p;j++)
{
dp[i][j] = dp[i][j - 1];
dp[i][j] = min({dp[i][j], dp[s[i] - 1][j - 1], dp[b[i] - 1][j] + 1});
}
}
return dp[n][p] <= q;
}
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin >> n >> p >> q;
for(int i=1;i<=n;i++) cin >> event[i];
sort(event.begin() + 1, event.begin() + n + 1);
if(p >= n || q >= n)
{
cout << 1;
return 0;
}
while(l < r)
{
int mid = (l + r) / 2;
bool ok = check(mid);
if(ok) r = mid;
else l = mid + 1;
}
cout << l;
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |