nyoj586||poj2456 二分+贪心

完全看不懂题意。。。。百度搜搜才看懂题意  然后就参考代码了尴尬 和yougth的最大化()nyoj914差不多的方法 二分+贪心

#include <stdio.h>
#include <algorithm>
using namespace std;
int c,a[100005],n;
bool judge(int k)
{
	int p=a[0],cnt=1;//也就这里注意点 从1开始 自己想想为啥
	for(int i=1;i<n;i++)
	{
		if(a[i]-p>=k)
		cnt++,p=a[i];
		if(cnt>=c)
		return true;
	}
	return false;
}
int bin_search(int right)//步步逼近最小值。
{
	int left=0,mid;
	while(left<=right)
	{
		mid=(left+right)/2;
		if(judge(mid))
		left=mid+1;
		else
		right=mid-1;
	}
	return left-1;
}
int main()
{
	while(scanf("%d %d",&n,&c)!=EOF)
	{
		for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
		sort(a,a+n);//从小到大排序
		printf("%d\n",bin_search(a[n-1]-a[0]));//a[n-1]-a[0]最大差值
	}
	return 0;
}


你可能感兴趣的:(nyoj586,poj2456)