【二分查找】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 }
原文地址:https://www.cnblogs.com/iiyiyi/p/4802225.html