首页 > 其他 > 详细

poj 3258 River Hopscotch 二分

时间:2014-05-13 20:02:59      阅读:390      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
 1 /**
 2 大意:给定n个点,删除其中的m个点,其中两点之间距离最小的最大值
 3 思路: 二分最小值的最大值---〉t,若有距离小于t,则可以将前面的节点删除;若节点大于t,则继续往下查看
 4           若删除的节点大于m,说明t,过于大,需要减小;若删除的节点小于m说明t过于小了,t需要增大
 5 **/
 6 #include <iostream>
 7 #include <algorithm>
 8 using namespace std;
 9 long long c[50050];
10 int main()
11 {
12     long long l,n,m;
13     cin>>l>>n>>m;
14     for(int i=1;i<=n;i++)
15         cin>>c[i];
16     c[0] =0;
17     c[n+1] = l;
18     n = n+2;
19     sort(c,c+n);
20     long long minn =c[1]-c[0];
21     for(int i=2;i<n;i++){
22         minn = min(minn,c[i]-c[i-1]);
23     }
24     long long low = minn,high = l;
25     long long mid;
26     while(low<=high){
27         mid = (high+low)>>1;
28         int cnt =0;
29         int s=0,e=1;//start 开始节点,end,最后节点
30         while(e<n){
31             if(c[e]-c[s]>=mid)
32                 s =e,e++;
33             else
34                 e++,cnt++;
35         }
36         if(cnt>m)
37             high = mid-1;
38         else
39             low = mid +1;
40     }
41     cout<<high<<endl;
42     return 0;
43 }
bubuko.com,布布扣

 

poj 3258 River Hopscotch 二分,布布扣,bubuko.com

poj 3258 River Hopscotch 二分

原文:http://www.cnblogs.com/Bang-cansee/p/3724259.html

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