【问题描述】
记得上学那会, Fbs同学经常会欺负萝卜同学。有一次,他出了这么一道题目,想为难一下萝卜同学。题目是这样的: 有N个整数X_i, X_i值的范围从0到1000000000。要从中选出C个数( 2<=C<=N),使得任意两个数差的绝对值的最小值尽可能大,求这个最大值。 由于数据太大, 这次萝卜同学的确被难住了,怎么办呢,请你来帮帮萝卜同学吧!
【输入格式】
第一行是N和C。
接下来的N行,每行一个整数。
【输入格式】
一个整数,表示两两最小差距的最大值。
【输入输出样例】
输入
5 3
1
2
8
4
9
输出
3
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
int num[200000];
//让最xiao值最da
int main()
{
int n,c;
cin>>n>>c;
for(int i=1;i<=n;i++){
cin>>num[i];
//cout<<"sd"<<endl;//
}
int l=0,r=1000000000,mid;
sort(num+1,num+n+1);
int ans;
while(r>=l)
{
cout<<ans<<"cx"<<endl;
mid=(l+r)/2;//
int k=1,cnt=1;
for(int i=2;i<=n;i++){
if(num[i]-num[k]>mid){//mid是假定的值
cnt++;//看看选了几个
k=i;//
}
}
if(cnt>=c){
//cnt大说明mid还不够大
l=mid+1;
}else{
r=mid-1;//
//ans=mid;
}
}
cout<<l<<endl;
}