在这改下
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,c,a[100010];
int find(int mid){
int num=0,i=0,cnt=0;
while(i<n){
i++;
if(a[i]-a[num]<=mid) cnt++;
else num=i;
}
return cnt<=n-c;
}
int main(){
scanf("%d%d",&n,&c);
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+1+n);
long long l=0,r=n+1,mid=(l+r)>>1;
while(l<r){
if(find(mid)) l=mid;
else r=mid;
}
printf("%lld",l);
return 0;
}
```
by lucy2012 @ 2024-03-19 20:35:51
@[lucy2012](/user/1252442)
改成如下可以避免 TLE(mid 要实时更新)
但是显然其他地方还有问题
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,c,a[100010];
int find(int mid){
int num=0,i=0,cnt=0;
while(i<n){
i++;
if(a[i]-a[num]<=mid) cnt++;
else num=i;
}
return cnt<=n-c;
}
int main(){
scanf("%d%d",&n,&c);
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+1+n);
long long l=0,r=n+1;
long long ans = 0;
while(l<=r){
long long mid=(l+r)>>1;
if(find(mid)) {
l = mid + 1;
ans = mid;
}
else r = mid - 1;
}
printf("%lld",ans);
return 0;
}
```
by Acerakoi @ 2024-03-19 20:42:29
@[Acerakoi](/user/514850) 改成为下面什么又TLE了?
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,c,a[100010];
int find(int mid){
int num=0,i=0,cnt=0;
while(i<n){
i++;
if(a[i]-a[num]<=mid) cnt++;
else num=i;
}
return cnt<=n-c;
}
int main(){
scanf("%d%d",&n,&c);
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+1+n);
long long l=0,r=n+1;
long long ans = 0;
while(l<=r){
long long mid=(l+r)>>1;
if(find(mid)) {
l = mid;//这
ans = mid;
}
else r = mid;//还有这
}
printf("%lld",ans);
return 0;
}
```
by lucy2012 @ 2024-03-19 21:05:55
@[lucy2012](/user/1252442) 注意 while() 条件
建议深度理解二分条件
by Acerakoi @ 2024-03-19 21:07:22
@[Acerakoi](/user/514850) 这样还是TLE
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,c,a[100010];
int find(int mid){
int num=0,i=0,cnt=0;
while(i<n){
i++;
if(a[i]-a[num]<=mid) cnt++;
else num=i;
}
return cnt<=n-c;
}
int main(){
scanf("%d%d",&n,&c);
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+1+n);
long long l=0,r=n+1;
long long ans = 0;
while(l<r){
long long mid=(l+r)>>1;
if(find(mid)) {
l = mid;
ans = mid;
}
else r = mid;
}
printf("%lld",ans);
return 0;
}
```
(蒟蒻思维有限
by lucy2012 @ 2024-03-19 21:11:42
@[lucy2012](/user/1252442) 再理解一下?
/xk
https://oi-wiki.org/basic/binary/
by Acerakoi @ 2024-03-19 21:20:48
这样错的
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,c,a[100010];
int find(int mid){
int k=0,last=-1;//int k=0,last=-1000000就对了
for(int i=1;i<=n;i++){
if(a[i]-last>=mid){
last=a[i];
k++;
}
}
return k>=c;
}
int main(){
scanf("%d%d",&n,&c);
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+1+n);
long long l=0,r=1000000010,mid,ans;
while(l<=r){
mid=l+r>>1;
if(find(mid)) l=mid+1,ans=mid;
else r=mid-1;
}
printf("%lld",ans);
return 0;
}
```
为什么
by lucy2012 @ 2024-03-20 16:49:49