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 }}