题目大意:
给出河的宽度,也就是开始的石头和结束石头之间的距离,再给出n个石头到开始石头的距离,求当移除n个石头中的m块时。两块石头之间的最短距离。
解题思路:
对最短距离进行二分查找。
下面是代码:
#include <stdio.h>
#include <algorithm>
using namespace std;
int l,n,m,a[50005],L;
int main()
{
int i,j,low=0,high,mid,cnt,sum;
scanf("%d%d%d",&l,&n,&m);
for(i=1;i<n+1;i++)
{
scanf("%d",&a[i]);
}
a[0]=0;
a[n+1]=l;
high=l;
sort(a,a+n+2);
while(low<=high)
{
mid=(low+high)>>1;
cnt=0;
sum=0;
for(i=0;i<n+1;i++)
{
if(sum+a[i+1]-a[i]<=mid)
{
sum+=a[i+1]-a[i];
cnt++;
}
else
{
sum=0;
}
}
if(cnt<=m)
{
low=mid+1;
}
else
{
high=mid-1;
}
}
printf("%d\n",low);
return 0;
}