问题描述
Farmer John 建造了一个有 𝑁N(22 ≤≤ 𝑁N ≤≤ 100000100000) 个隔间的牛棚,这些隔间分布在一条直线上,坐标是 𝑥1x1 ,...,𝑥𝑁xN (0 ≤≤ 𝑥𝑖xi ≤≤ 10000000001000000000)。
他的 𝐶C(22 ≤≤ 𝐶C ≤≤ 𝑁N) 头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒。为了防止牛之间的互相打斗,Farmer John 想把这些牛安置在指定的隔间,所有牛中相邻两头的最近距离越大越好。那么,这个最大的最近距离是多少呢?
输入
第 11 行:两个用空格隔开的数字 𝑁N 和 𝐶C。
第 22 ~ 𝑁+1N+1 行:每行一个整数,表示每个隔间的坐标。
输出
输出只有一行,即相邻两头牛最大的最近距离。
样例
输入
5 3 1 2 8 4 9
输出
3
此题不用太多算法,一个while循环在主函数里二分就够了,再递加一下写个函数就信了
此文作为学术作用,建议大家不要抄答案
代码:
#include<bits/stdc++.h>//万能库
using namespace std;
long long n,m,a[100005],mx;
int f(long long x)
{
long long cnt=1,p=a[0];
for(int i=1;i<n;i++)
{
if(a[i]-p>=x) cnt++,p=a[i];
}
return cnt;
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i],mx=max(mx,a[i]);
stable_sort(a,a+n);
long long l=0,r=mx;
while(l<=r)
{
long long x=(l+r)/2;
long long t=f(x);
if(t>=m) l=x+1;
else r=x-1;
}
if(f(l)>=m) cout<<l;
else cout<<r;
return 0;//完美
}