题目
代码
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
const int maxn=1e5+10;
int n,m,a[maxn];
bool check(int k){
int sum=0,cnt=0;//sum上一个点,cnt人数
for(int i=1;i<=n;i++){
if(a[i]-sum>=k){//如果上一个点不用
sum=a[i];
}
else cnt++;//人数
}
return cnt > n-m;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);//排序
int L=1,R=a[n];
while(L<R){
int mid=L+(R-L)/2;
if( check(mid) ){
R=mid-1;//大了
}
else L=mid+1;//小了
}
cout<<L;
return 0;
}