首页 > 代码库 > 洛谷——P1316 丢瓶盖
洛谷——P1316 丢瓶盖
https://www.luogu.org/problem/show?pid=1316
题目描述
陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢?
输入输出格式
输入格式:
第一行,两个整数,A,B。(B<=A<=100000)
第二行,A个整数,分别为这A个瓶盖坐标。
输出格式:
仅一个整数,为所求答案。
输入输出样例
输入样例#1:
5 31 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 丢瓶盖
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。