#include <bits/stdc++.h>
using namespace std;
int a[2005];
int n,p,q;
int dp[105][105][105];
int check(int w, int l, int s, int b){
if(l==0) return 1;
if(dp[l][s][b]!=0) return dp[l][s][b];
dp[l][s][b]=-1;
if(s>0){
int nl=l-1;
while(nl>0){
if(a[l-1]-a[nl-1]<w) nl--;
else break;
}
dp[l][s][b]=max(dp[l][s][b],check(w,nl,s-1,b));
}
if(b>0){
int nl=l-1;
while(nl>0){
if(a[l-1]-a[nl-1]<2*w) nl--;
else break;
}
dp[l][s][b]=max(dp[l][s][b],check(w,nl,s,b-1));
}
return dp[l][s][b];
}
int bs(){
int l=1,r=1e9,mid;
while(l<=r){
mid=(l+r)/2;
int g=check(mid,n,p,q);
if(g==1) r=mid-1;
else l=mid+1;
for(int i=0; i<=n; i++){
for(int j=0; j<=p; j++){
for(int z=0; z<=q; z++){
dp[i][j][z]=0;
}
}
}
}
return l;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>n>>p>>q;
for(int i=0; i<n; i++) cin>>a[i];
sort(a,a+n);
if(p+q>=n){
cout<<1;
return 0;
}
cout<<bs();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |