【二分查找】POJ2456-Aggressive cows

【题目大意】

有N间牛舍和M头牛,告诉你每个牛舍的位置,求出两头牛之间最小距离的最大值。

【思路】

二分判断两头牛之间的最小距离d,通过贪心法进行验证。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 const int MAXN=100000+500;
 8 int n,m;
 9 int pos[MAXN];
10
11 int whether(int d)
12 {
13     int now=1;
14     int nowpos=pos[0]+d;
15     for (int i=1;i<m;i++)
16     {
17         while (pos[now]<nowpos && now<n) now++;
18         if (now==n)
19         {
20             return 0;
21         }
22         nowpos=pos[now]+d;
23     }
24     return 1;
25 }
26
27 int main()
28 {
29     scanf("%d%d",&n,&m);
30     for (int i=0;i<n;i++) scanf("%d",&pos[i]);
31     sort(pos,pos+n);
32
33     int lb=0,ub=pos[n-1];
34     while (ub-lb>1)
35     {
36         int mid=(lb+ub)/2;
37         if (whether(mid)) lb=mid;
38         else ub=mid;
39     }
40     cout<<lb<<endl;
41     return 0;
42 }
时间: 2024-10-29 10:46:26

【二分查找】POJ2456-Aggressive cows的相关文章

poj2456 Aggressive cows(二分查找)

https://vjudge.net/problem/POJ-2456 二分,从最大长度开始,不断折半试,如果牛全放下了,就是可行,修改下界,否则改上届. 1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<cstring> 5 #include<algorithm> 6 #include<cmath> 7 #include<map> 8

POJ2456 Aggressive cows(二分+贪心)

假设C(d)为满足所有牛之间的距离都不小于d.先对牛舍的位置排序,然后二分枚举d,寻找满足条件的d. #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<queue> #include<set> #include<map> #include<vector&g

POJ2456 Aggressive cows (二分)

题目链接: http://poj.org/problem?id=2456 题意: 有n个牛舍,位置为xi,c头牛,把每头牛放在与其相邻牛的距离尽量远的牛舍,即最大化相邻两头牛之间的距离,求这个最大距离. 分析: 二分答案,然后O(N)的复杂度判断符不符合. 代码如下: #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace st

[POJ2456]Aggressive cows

题目链接:http://poj.org/problem?id=2456 二分+贪心 这是个求最小值最大的问题,我们二分从0到inf的数d,作为两头牛放置的距离不小于d,然后贪心判断. 首先要对x从小到大进行排序,接下来固定x[0]处必有一头牛,然后间距不小于d的时候,可以放置,一直放置,直到所有牛舍均被遍历O(n). 如果牛被完全放置,那么返回true,并且向右确定边界,反之向左确定. ac代码(32ms): 1 #include <cstdio> 2 3 const int maxn = 1

[ACM] poj 2456 Aggressive cows (二分查找)

Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5436   Accepted: 2720 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...

poj 2456 Aggressive cows(二分)

// n点中选c点放下c头牛 是的n-1段距离中的最短距离最大 ,求这个最大的最短距离 //假设当前的最小值为x,如果判断出最小差值为x时可以放下C头牛, //就先让x变大再判断:如果放不下,说明当前的x太大了, //就先让x变小然后再进行判断.直到求出一个最大的x就是最终的答案. # include <algorithm> # include <string.h> # include <stdio.h> using namespace std; int n,c,i,a

【POJ - 2456】Aggressive cows(二分)

Aggressive cows 直接上中文了 Descriptions 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000). 但是,John的X (2 <= X <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗.为了不让牛互相伤害.John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个

BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )

最小最大...又是经典的二分答案做法.. -------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define rep( i , n ) for( int i = 0 ; i < n ; ++i ) #defin

POJ 2456 Aggressive cows (二分 基础)

Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7924   Accepted: 3959 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...