为什么我这里要减一才能过
查看原帖
为什么我这里要减一才能过
929819
HEIMOFA楼主2023/7/7 14:25
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
const int N=50005;
int a[N],ne[N];

bool check(int x){
	for(int i=n;i>=1;i--) ne[i]=a[i-1];
	int sum=0;
	for(int i=2;i<=n;i++) if(a[i]-ne[i]<x) ne[i+1]=ne[i],sum++;
	return sum>m;
}
signed main()
{
	int d;
	scanf("%lld%lld%lld",&d,&n,&m);
	for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
	a[++n]=0,a[++n]=d;
	sort(a+1,a+n+1);
	int l=1,r=1e9;
	while(l<r){
		int mid=l+r>>1;
		if(check(mid)) r=mid;
		else l=mid+1;
	}
	printf("%lld",l-1);//就是这里
	return 0;
}
2023/7/7 14:25
加载中...