A - Aggressive cows POJ - 2456 (二分专题 )

https://vjudge.net/contest/241402#problem/A

题意:

有n个牛栏,选m个放进牛,相当于一条线段上有 n 个点,选取 m 个点,使得相邻点之间的最小距离值最大

思路:二分枚举相邻两牛的间距,判断大于等于此间距下能否放进所有的牛,具体详见代码。

#include
#include
#include
using namespace std;
int n,c,a[100005];
int judge(int x)    //判断当最小距离是x时,可放入几头牛 
{
	int i,s=1,p=a[0];      //一定从a[0]取 
	for(i=1; i=x)   
		{
			s++;//s记录放入几头牛 
			p=a[i]; //p记录上一个放入牛的房间 
		}
	}
	return s;
}
int main()
{
	int i,j;
	scanf("%d%d",&n,&c);
	for(i=0; i=low)
	{
		 mid=(low+high)/2;
		if(judge(mid)>=c)   //如果可放入牛的数目>=c头牛的话,则满足条件,且最小值还可以继续扩大
			low=mid+1;
		else               // 最小值取大了,对左侧区间再进行二分查找。
			high=mid-1;
	}
	printf("%d\n",mid);
	return 0;
}

 

你可能感兴趣的:(A - Aggressive cows POJ - 2456 (二分专题 ))