POJ - 2456
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int n,m;
vector<int> vec;
bool judge(int l);
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int t;
cin>>t;
vec.push_back(t);
}
sort(vec.begin(),vec.end());
int l,r,mid;
l=0;r=0x003f3f3f;
while(r-l>1){
mid=(l+r)/2;
if(judge(mid))l=mid;//因为条件成立时总是l为mid所以输出时使用l的值
else r=mid;
}
printf("%d\n",l);
return 0;
}
bool judge(int l){
int last=vec[0];
int num=1;
for(int i=1;i<n;i++){
if(vec[i]-last>=l){
num++;
if(num>=m)return true;
last=vec[i];
}
}
return false;
}