为什么这样能过
#include<bits/stdc++.h>
using namespace std;
long long lon,n,m,a[100000],l,r,mid;
int find(int mid){
int cnt=0,num=0,i=0;
while(i<n+1){
i++;
if(a[i]-a[num]<mid)
cnt++;
else
num=i;
}
return cnt<=m;
}
int main(){
cin>>lon>>n>>m;
a[0]=0;a[n+1]=lon;
l=1;r=lon;
if(n==0) {cout<<lon;return 0;}
for(int i=1;i<=n;i++)
cin>>a[i];
while(l<r){
mid=(l+r+1)>>1;
if(find(mid)) l=mid;
else r=mid-1;
}
cout<<l;
return 0;
}
但这样不能
#include<bits/stdc++.h>
using namespace std;
long long lon,n,m,a[100000],l,r,mid;
int find(int mid){
int cnt=0,num=0,i=0;
while(i<=n+1){//这里改了
i++;
if(a[i]-a[num]<mid)
cnt++;
else
num=i;
}
return cnt<=m;
}
int main(){
cin>>lon>>n>>m;
a[0]=0;a[n+1]=lon;
l=1;r=lon;
if(n==0) {cout<<lon;return 0;}
for(int i=1;i<=n;i++)
cin>>a[i];
while(l<r){
mid=(l+r+1)>>1;
if(find(mid)) l=mid;
else r=mid-1;
}
cout<<l;
return 0;
}