愤怒的牛

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 const int maxn=1e5+7;
 6 int n,m;
 7 int l,r,mid;
 8 int xx[maxn];
 9 bool check(int u){
10     int cnt=1;int lft=xx[1]+u;
11     for(int i=2;i<=n;i++){
12         if(lft<=xx[i]) {cnt++;lft=xx[i]+u;}
13     }
14     return cnt>=m;
15 }
16 int main(){
17     cin>>n>>m;
18     for(int i=1;i<=n;i++) cin>>xx[i];
19     sort(xx+1,xx+n+1);
20     l=0;r=xx[n]-xx[1];
21     while(l<=r){
22         mid=(l+r)/2;
23         if(check(mid)) l=mid+1;
24         else r=mid-1; 
25     }
26     cout<<r<<endl;
27     return 0;
28 }

如果不是l=mid+1,r=mid-1的话,因为这里都是整数,很可能出现l=mid的情况,这是就会无限循环下去

猜你喜欢

转载自www.cnblogs.com/lcan/p/9612425.html