只对三个点,求助!!
查看原帖
只对三个点,求助!!
501652
LCY0921楼主2022/7/13 00:10
#include<bits/stdc++.h>
using namespace std;
int l,n,k;
int sh[100005];
int sq[100005];
bool qq(int x,int y){
	if(x>y) return 1;
	else return 0;
}
int main(){
	scanf("%d%d%d",&l,&n,&k);
	for(int i=1;i<=n;i++){
		scanf("%d",&sh[i]);//sh为距离起点距离 
	}
	sort(sh+1,sh+n+1);
	for(int i=1;i<n;i++){
		sq[i]=sh[i+1]-sh[i];//sq为所有相邻两点间距离 
	}
	sort(sq+1,sq+n,qq);//排序之后,sq由大到小 
	int l=1,r=sq[1];
	while(l<r){
		int m=(l+r)>>1;
		int s=k;
		int t=1;
		int maxn=0;
		while(s>0){
			if((sq[t]-1)/m==0){
				maxn=sq[t];
				break;
			}
			if(s>(sq[t]-1)/m){
				t++;
				s=s-((sq[t]-1)/m);
			}
			else break; 
			
		}
		if(sq[t+1]<=m&&sq[t]-m*s<=m&&maxn<=m){
			r=m;
		}
		else{
			l=m+1;
		}
	}
	printf("%d",l);
	return 0;
}
2022/7/13 00:10
加载中...