poj2456最小值最大化问题

题目大意:有n个牛棚,先将m头牛分别分进不同的牛棚里,假设这些牛凉凉间的最小距离为K,求k的最大值


思路:最小值最大化问题。。。。先对位置排序,对k不断二分枚举其最大值。


#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int A[100010],n,m;
bool f(int a){      //检查函数,当前判断当前最小值是否满足条件
	int sum,last,i;
	last=A[1];
	sum=1;
	for(i=2;i<=n;i++){
		if(A[i]-last>=a){
			sum++;
			last=A[i];
		}
	}
	if(sum>=m) return true;
	else return false;
}

int main(){
	int i;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++) scanf("%d",&A[i]);
	sort(A+1,A+n+1);
	int l=0,r=A[n]-A[1],mid;
	while(r>l+1){    //二分确定上界和下界
		mid=(l+r)/2;
		if(f(mid)) l=mid;
		else r=mid;
	}
	cout<<l<<endl;
	return 0;
}




猜你喜欢

转载自blog.csdn.net/guogai13/article/details/79146605