POJ T2456 Aggressive cows(二分搜索:最大化最小值)

版权声明:希望能帮到弱校的ACMer成长,因为自己是弱校菜鸡~~~~ https://blog.csdn.net/Mr__Charles/article/details/82873938

                           POJ T2456  Aggressive cows


题解:

  可以套用二分搜索求解最优解的模型(这个博客

  题意是有N个牛舍,C头牛,给出的牛舍位置并不按顺序。因为牛之间会打架,所以要求两两牛之间能隔开的最大距离。(一头牛一个牛舍)。

  这是二分搜索最大化最小值的例子。

  C(d):安排牛的位置使得任意牛之间的距离大于等于d

  1.牛舍位置无序,先排序

  2. 第一头牛放入第一个牛舍

  3.第i头牛放入Xj的牛舍,则第i+1头牛放入牛舍需满足Xj + d <= Xk

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 1e5;
const int INF = 1e9; 
int sta[MAXN+5],n,c;
bool vis[MAXN+5];

bool judge(int x){
	int sp = 0;
	for(int i = 1; i < c; ++i){
		int np = sp+1;
		while(np < n && sta[np] - sta[sp] < x)
			np++;
		if(np == n) return false;
		sp = np;
	}
	return true;
}

void solve(){
	int L = -1,R = INF;
	while(R - L > 1){
		int mid = (L + R)/2;
		if(judge(mid)) L = mid;
		else R = mid;
	}
	printf("%d\n",L);
}

int main(){
	while(~scanf("%d%d",&n,&c)){
		for(int i = 0; i < n; ++i)
			scanf("%d",&sta[i]);
		sort(sta,sta+n);
		solve();
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/Mr__Charles/article/details/82873938