这种二分写法经常会出问题,你自己考虑边界啊。
by 聊机 @ 2023-10-12 12:14:49
如果 mid 合法的话,更新答案。
by Creeper_l @ 2023-10-12 12:23:58
~~check函数可能出了点问题~~
```cpp
#include<iostream>
using namespace std;
int L,N,K,a[100010],l,r,ans,mid;
bool check(int x){
int len=0,s=K;
for(int i=1;i<N;i++){
if(s<0)break;
if(a[i]-len<=x)len=a[i];
else len+=x,s--,i--;
}
return s>=0;
}
int main(){
scanf("%d%d%d",&L,&N,&K);
for(int i=0;i<N;i++)scanf("%d",&a[i]);
l=0,r=L;
while(l<=r){
mid=(l+r)/2;
if(check(mid))ans=mid,r=mid-1;
else l=mid+1;
}
printf("%d",ans);
return 0;
}
```
by dangerous_DZR @ 2023-10-12 12:57:00
@20120326Dzr哦 谢谢
by _8008008 @ 2023-10-12 13:00:07