第一段代码是过了的,第二段代码改了一下条件过不了了,虽然我觉得是对的(太蒟蒻了),麻烦各位大佬康康为啥不对:
代码一:
#include<bits/stdc++.h>
using namespace std;
int a[50004],L,n,m,l,r;
long long mid,ans;
bool f(int aim){
int cnt=0,j=0;
for(int i=1;i<=n+1;i++)a[i]-a[j]<aim ? cnt++:j=i;
return cnt<=m ? true:false;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>L>>n>>m;
a[n+1]=L;
for(int i=1;i<=n;i++){
cin>>a[i];
l=min(l,a[i]-a[i-1]);
}
r=L;
while(l<=r){
mid=(l+r)>>1;
f(mid) ? ans=mid,l=mid+1:r=mid-1;
}
cout<<ans;
return 0;
}
代码二:
#include<bits/stdc++.h>
using namespace std;
int a[50004],L,n,m,l,r;
long long mid,ans;
bool f(int aim){
int cnt=0,j=0;
for(int i=1;i<=n+1;i++)a[i]-a[j]<aim ? cnt++:j=i;
return cnt<m ? true:false;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>L>>n>>m;
a[n+1]=L;
for(int i=1;i<=n;i++){
cin>>a[i];
l=min(l,a[i]-a[i-1]);
}
r=L;
while(l<=r){
mid=(l+r)>>1;
f(mid) ? l=mid+1:ans=mid,r=mid-1;
}
cout<<ans;
return 0;
}
就是f函数里面的取等条件改了一下,还有ans的,但我想不懂为啥不对(好像跟题解写得雷同?)求助大佬