洛谷 P1316丢瓶盖

题目描述

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

输入输出格式

输入格式:

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

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

输出格式:

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

 1 #include<bits/stdc++.h>//二分答案
 2 using namespace std;
 3 int n,c,a[100010],l=1,r,mid;
 4 bool check(int x){//判断
 5     int tot=1;
 6     int num=1;
 7     for(int i=2;i<=n;i++)
 8         if(a[i]-a[num]>=x){
 9             tot++;
10             num=i;
11         }
12     if(tot>=c)return true;
13     return false;
14 }
15 void search(){
16     r=a[n]-a[1];
17     while(l<=r){
18         mid=(l+r)/2;
19         if(check(mid))l=mid+1;
20         else r=mid-1;
21     }
22 }
23 int main()
24 {
25     cin>>n>>c;
26     for(int i=1;i<=n;i++)
27        cin>>a[i];
28     sort(a+1,a+n+1);
29     search();
30     cout<<r;
31     return 0;
32 }

猜你喜欢

转载自www.cnblogs.com/1129-tangqiyuan/p/9495097.html