首页 > 其他 > 详细

POJ2456 Aggressive cows(二分)

时间:2020-01-09 18:12:11      阅读:152      评论:0      收藏:0      [点我收藏+]

链接:http://poj.org/problem?id=2456

题意:一个数轴上n个点,每个点一个整数值,有c个奶牛,要放在这些点的某几个上,求怎么放可以使任意两个奶牛间距离的最小值最大,求这个最大值。

思路:仍然是最大化最小值,套路一样,二分最小距离,每次check即可

AC代码:

 1 #include<iostream>
 2 #include<vector>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<cstring>
 7 #include<queue>
 8 #include<map>
 9 using namespace std;
10 const int maxn = 1e5+5;
11 typedef long long ll;
12 ll sta[maxn];
13 int N,C; 
14 bool check(ll dis){
15     int sum = 1;
16     int cur = 0;
17     for(int i = 1;i<N;i++){
18         if(sta[i] - sta[cur]>=dis){
19             sum++;
20             cur = i;
21         }
22     }
23     return sum>=C;
24 }
25 int main(){
26     while(cin>>N>>C){
27         for(int i = 0;i<N;i++){
28             cin>>sta[i];
29         }
30         sort(sta,sta+N);
31         ll MAX = -1;
32         for(int i = 1;i<N;i++){
33             MAX = max(MAX,sta[i]-sta[i-1]);
34         }
35         ll l = 0,r = MAX *2;
36         ll mid;
37         while(l<r){
38             mid = (1+l+r)>>1;
39             if(check(mid)){//sum>=C;
40                 l = mid ;
41             }
42             else{
43                 r = mid - 1;
44             }
45         }
46     //    cout<<l<<" "<<r<<endl;
47         cout<<l<<endl;
48     }
49     return 0;
50 }

POJ2456 Aggressive cows(二分)

原文:https://www.cnblogs.com/AaronChang/p/12172452.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!