ans
jinpeiyu
2024-02-03 16:04:39
10
返回题目
#include <iostream>
#include <algorithm>
using namespace std;
int a[100001] = {};
int n, c,mid;
//判断当前枚举的间隔m,够不够C头牛使用
bool check(int m)
{
int cnt = 1;
int tmp = a[0];
for(int i = 1; i < n; i++)
{
if(a[i] - tmp >= m)
{
cnt++;
tmp = a[i];
if(cnt >= c)
return true;
}
}
return false;
}
int main(){
cin >> n >> c;
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
sort(a,a+n);
int left = 0, right = a[n-1] - a[0], ans = 0;
while(left <= right) //基本二分答案框架
{
mid = (left + right) >> 1; //不停的枚举答案mid >>1 位运算符 相当于除2
if(check(mid))
{
ans = mid;
left = mid + 1;
}
else
right = mid - 1;
}
cout << ans << endl;
return 0;
}
{{ vote && vote.total.up }}