Submission #987597

#TimeUsernameProblemLanguageResultExecution timeMemory
987597hengliaoWatching (JOI13_watching)C++17
100 / 100
283 ms31912 KiB

#include<bits/stdc++.h>
using namespace std;
 
#define F first
#define S second
#define pb push_back
#define vll vector<ll>
#define pll pair<ll, ll>
typedef long long ll;
 
const ll mxN=2005;
const ll inf=1e17;
 
ll n, p, q;
 
ll a[mxN];
ll dp[mxN][mxN];
ll o[mxN];
ll s[mxN];
 
bool check(ll tar){
	for(ll i=0;i<=n;i++){
		for(ll j=0;j<=p;j++){
			dp[i][j]=inf;
		}
	}
	for(ll i=0;i<=p;i++){
		dp[0][i]=0;
	}
	ll pt=0;
	for(ll i=0;i<n;i++){
		while(pt<n && a[pt]-a[i]+1<=tar){
			pt++;
		}
		o[i]=pt;
	}
	//cout<<"dumb "<<o[8]<<'\n';
	pt=0;
	for(ll i=0;i<n;i++){
		while(pt<n && a[pt]-a[i]+1<=2*tar){
			pt++;
		}
		s[i]=pt;
	}
	for(ll i=0;i<n;i++){
		for(ll j=0;j<=p;j++){
			//cout<<i<<' '<<j<<' '<<dp[i][j]<<'\n';
			// take small
			dp[o[i]][j]=min(dp[o[i]][j], dp[i][j]+1);
			//take big
			dp[s[i]][j+1]=min(dp[s[i]][j+1], dp[i][j]);
		}
	}
	//cout<<"checking "<<tar<<' '<<dp[n][p]<<'\n';
	//cout<<q<<' '<<(dp[n][p]<=q)<<'\n';
	return (dp[n][p]<=q);
}
 
void solve(){
	cin>>n>>q>>p;
	for(ll i=0;i<n;i++){
		cin>>a[i];
	}
	sort(a, a+n);
	/*for(ll i=0;i<n;i++){
		cout<<a[i]<<' ';
	}
	cout<<'\n';*/
	if(p+q>=n){
		cout<<1<<'\n';
		return;
	}
 
	ll ans;
	ll l=1, r=1e9+5;
 
	while(l<=r){
		ll mid=(l+r)/2;
		if(check(mid)){
			//cout<<mid<<" good\n";
			ans=mid;
			r=mid-1;
		}
		else{
			//cout<<mid<<" bad\n";
			l=mid+1;
		}
	}
	cout<<ans<<'\n';
 
	//check(8);
}
 
int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
 
	solve();
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...