码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷——P1316 丢瓶盖

时间:2017-07-02 15:17:57      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:blank   pid   ++   ref   problem   简化   targe   lan   color   

https://www.luogu.org/problem/show?pid=1316

题目描述

陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢?

输入输出格式

输入格式:

 

第一行,两个整数,A,B。(B<=A<=100000)

第二行,A个整数,分别为这A个瓶盖坐标。

 

输出格式:

 

仅一个整数,为所求答案。

 

输入输出样例

输入样例#1:
5 3
1 2 3 4 5
输出样例#1:
2

说明

限时3秒

 

把题目看作是拿走a-b个瓶盖后是剩下的最短距离最小,就变得和跳石头一样了

 1 #include <algorithm>
 2 #include <cstdio>
 3 
 4 using namespace std;
 5 
 6 const int N(100000+15);
 7 int a,b,x[N];
 8 
 9 int l,r,mid,ans;
10 bool check(int dis)
11 {
12     int sum=0,cnt=0;
13     for(int i=2;i<=a;i++)
14     {
15         sum+=x[i]-x[i-1];
16         if(sum<dis) cnt++;
17         else sum=0;
18         if(cnt>a-b) return false;
19     }
20     return true;
21 }
22 
23 int main()
24 {
25     scanf("%d%d",&a,&b);
26     for(int i=1;i<=a;i++) scanf("%d",x+i);
27     sort(x+1,x+a+1);
28     for(r=x[a]-x[1];l<=r;)
29     {
30         mid=l+r>>1;
31         if(check(mid))
32         {
33             l=mid+1;
34             ans=mid;
35         }
36         else r=mid-1;
37     }
38     printf("%d",ans);
39     return 0;
40 }

 

洛谷——P1316 丢瓶盖

标签:blank   pid   ++   ref   problem   简化   targe   lan   color   

原文地址:http://www.cnblogs.com/Shy-key/p/7105986.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!