Submission #397978

#TimeUsernameProblemLanguageResultExecution timeMemory
397978lukameladzeWatching (JOI13_watching)C++14
100 / 100
406 ms31856 KiB
# include <bits/stdc++.h>
#define f first
#define s second
#define pb push_back
using namespace std;
const int N=2005;
long long le,ri,mid,n,a[N],m,pr[N],pr1[N],dp[N][N],w,k,ans;
int check(int mid) {
	for (int i=0; i<=n; i++) {
		for (int j=0; j<=n; j++) {
			dp[i][j]=1e9;
		}
	}
	dp[0][0]=0;
	w=mid;
	for (int i=1; i<=n; i++) {
		pr[i]=pr1[i]=0;
		for (int j=i; j>=1; j--) {
			if (a[i]-a[j]>=w && !pr[i]) {
				pr[i]=j;
			//	break;
			}
			if (a[i]-a[j]>=2*w && !pr1[i]) {
				pr1[i]=j;
			//	break;
			}
		}
	//	cout<<i<<" "<<pr[i]<<" "<<pr1[i]<<endl;
	}
	for (int i=1; i<=n; i++) {
		for (int j=0; j<=min(m,(long long)i); j++) {
			if(j)
			dp[i][j]=dp[pr[i]][j-1];
			dp[i][j]=min(dp[i][j],dp[pr1[i]][j]+1);
			if (i==n && dp[n][j]<=k) return 1;
		}
	}
	//if (dp[n][m]<=k) return 1;
	return 0;
}
int main() {
	cin>>n>>m>>k;
	for (int i=1; i<=n; i++) {
		cin>>a[i];
	}
	sort(a+1, a+n+1);
	for (int i=1; i<=n; i++) {
		for (int j=i; j>=1; j--) {
			if (a[i]-a[j]>w) {
				pr[i]=j;
				break;
			}
			if (a[i]-a[j]>2*w) {
				pr1[i]=j;
				break;
			}
		}
	}
	le=1;
	ri=1e9;
	while (le<=ri) {
		mid=(le+ri)/2;
		if (check(mid)) {
			ri=mid-1;
			ans=mid;
		}
		else {
			le=mid+1;
		}
	}
	cout<<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...