ans

wangruihao 2024-02-03 16:20:08 3 返回题目

//此题一看就是二分答案题
#include<bits/stdc++.h>
using namespace std;
int n,m,x[100010];
int check(int w){
	int sum=x[1]//初始在最左边(贪心),cnt=1;
	for(int i=2;i<=n;i++){
		if(x[i]-sum>=w) sum=x[i],cnt++;
	}
	if(cnt>=m) return true;
	return false;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>x[i];
	sort(x+1,x+1+n);//之后的查找必须从小到大
	int l=1,r=x[n]//答案范围在1到x[n]内;
	while(l+1<r){
		int mid=(l+r)/2;
		if(check(mid)) l=mid;
		else r=mid;
	}
	if(check(r)) cout<<r;//因为r>l,答案先取大的
	else cout<<l;
	return 0;
}
{{ vote && vote.total.up }}