题解:本题主要考查二分,贪心。本题贪心从左岸开始,移走它小于m的所
有石头,再往后跳一步,循环往复。暴力枚举肯定超时,因为答案求最值并且有一定的范围,所以可以二分。
代码如下:
#include<iostream>
using namespace std;
int l,n,m,leftt,rightt,mid,now,num,sum=0,i;
int a[845734];
int main()
{
cin>>l>>n>>m;
for(i=1;i<=n;i++)cin>>a[i];
leftt=0;rightt=l;
while(leftt<=rightt)
{
mid=(leftt+rightt)/2;//二分
now=0;num=0;
for(i=1;i<=n;i++)
{
if(a[i]-a[now]<mid)num++;
else now=i;}
if(num<=m){sum=mid;leftt=mid+1;}
else rightt=mid-1;
}
cout<<sum;
return 0;
}