#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define pii pair<int,int>
#define sz(v) (int)v.size()
#define fi first
#define se second
#define INF 1223372036854775807
int32_t main(){
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int n,p,q;
cin>>n>>p>>q;
int a[n];
for (int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
if (p>=n){
cout<<1<<endl;
return 0;
}
int l=1,r=999999999999;
while (r>=l){
int w=(r+l)/2;
int prv[n];
int prv2[n];
for (int i=0;i<n;i++){
prv[i]=-1;
prv2[i]=-1;
for (int j=0;j<n;j++){
if (a[j]<=a[i]-w) prv[i]=j;
if (a[j]<=a[i]-2*w) prv2[i]=j;
}
}
int dp[n][n+1]={};
dp[0][0]=1;
for (int i=1;i<n;i++){
for (int j=0;j<=n;j++){
dp[i][j]=INF;
if (j>0){
if (prv[i]!=-1) dp[i][j]=min(dp[i][j],dp[prv[i]][j-1]);
else dp[i][j]=0;
}
if (prv2[i]!=-1) dp[i][j]=min(dp[i][j],dp[prv2[i]][j]+1);
else dp[i][j]=min(dp[i][j],1ll);
}
}
if (dp[n-1][p]<=q) r=w-1;
else l=w+1;
}
cout<<l<<endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |