题目大意:
求出公路上相邻路标的最大距离最小值。
code:
#include<bits/stdc++.h>
using namespace std;
long long ll,n,k,a[100001];
int main(){
cin>>ll>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
long long l=1,r=ll;
while(l<=r){
long long mid=(l+r)/2;
long long sum=0,now=1;//sum记录路标个数,now记录上一个路标的位置
for(int i=1;i<=n;i++){
if(a[i]-now>mid){//如果这两个相邻路标的距离要比mid(空旷指数)要大
sum+=(a[i]-now)/mid;//就增加路标数量
if((a[i]-now)%mid==0){//如果可以整除,就要少添加一个
sum--;
}
}
now=a[i];//记录一下路标位置
}
if(sum<=k){//如果需要添加的路标数量比k小
r=mid-1;//继续缩小空旷指数
}else{
l=mid+1;//否则扩大空旷指数
}
}
cout<<l;
return 0;
}