Submission #1264712

#TimeUsernameProblemLanguageResultExecution timeMemory
1264712nlsosadWatching (JOI13_watching)C++20
100 / 100
140 ms31828 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int inf = 1e18;
int a[2001];
int dp[2001][2001];
int cook(int w, int n, int p){
	for (int i = 0;i<=n;++i){
		for (int j = 0;j<=p;++j){
			dp[i][j] = inf;
		}
	}
	for (int i = 0;i<=p;++i){
		dp[0][i] = 0;
	}
	vector<int> ps(n+1, 0);
	vector<int> pl(n+1, 0);
	int l = 1, ll = 1;
	for (int i = 1;i<=n;++i){
		while(l<i and a[i]-a[l]>=w){
			l++;
		}
		while(ll<i and a[i]-a[ll]>=2*w){
			ll++;
		}
		ps[i] = l;
		pl[i] = ll;
	}
	/*for (int i = 1;i<=n;++i){
		cout << ps[i] << ' ';
	}
	cout << '\n';
	for (int i =1;i<=n;++i){
		cout << pl[i] << ' ';
	}
	cout << '\n';*/
	for (int i = 1;i<=n;++i){
		dp[i][0] = dp[pl[i]-1][0] +1;
		for (int j = 1;j<=p;++j){
			dp[i][j] = min(dp[ps[i]-1][j-1], dp[pl[i]-1][j]+1);
		}
	}
	return dp[n][p];
}
signed main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int n, p, q;
	cin >> n >> p >> q;
	for (int i = 1;i<=n;++i){
		cin >> a[i];
	}
	sort(a+1, a+n+1);
	int l = 1, r = 1000000000;
	// int l = 14, r = 14;
	int res = 1;
	while(l<=r){
		int w = (l+r)/2;
		int t = cook(w, n, min(n, p));
		// cout << w << ' ' << t << '\n';
		if(t <= q){
			res = w;
			r = w-1;
		}else l = w+1;
	}
	cout << res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...