如果cnt>c;那么这个距离太大了,并且不包括答案,所以r=mid-1; 如果cnt<=c,这个距离太小了,并且可能包括答案,所以l=mid; 为啥不对呢
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n,c;
int a[maxn]= {0};
int d[maxn];
bool check(int mid)
{
int cnt=0;
for(int i=1; i<=n; i++)
{
if(d[i]<mid)
{
cnt++;
d[i+1]=d[i]+d[i+1];
}
}
if(cnt>c)
return true;
return false;
}
int bs(int l,int r)
{
while(l<r)
{
int mid=(l+r+1)>>1;
if(check(mid))
r=mid-1;
else
l=mid;
}
return l;
}
int main()
{
cin>>n>>c;
for(int i=1; i<=n; i++)
{
cin>>a[i];
}
sort(a+1,a+1+n);
for(int i=1; i<=n; i++)
{
d[i]=a[i]-a[i-1];
}
cout<<bs(1,maxn/2);
return 0;
}