挺水一题,二分跳跃的最小距离
#include<cstdio>
#define _rep(i,a,b) for(int i=(a);i<=(b);i++)
const int N=5e4+10;
int L,m,n;
int d[N];
bool judge(int lim)
{
int cnt=0,pre=0;
_rep(i,1,n)
{
if(d[i]-pre<lim){cnt++;continue;}
pre=d[i];
}
return cnt<=m;
}
int main()
{
//freopen("in.txt","r",stdin);
scanf("%d%d%d",&L,&n,&m);
_rep(i,1,n)scanf("%d",&d[i]);
int l=1,r=L;
while(l<r)
{
int mid=(l+r+1)>>1;
if(judge(mid))l=mid;
else r=mid-1;
}
printf("%d\n",l);
return 0;
}