P2678跳石头
用的二分答案
#include<bits/stdc++.h>
using namespace std;
int l,m,n,a[51000];
int check(int tmp)
{
int cnt=0,p=0;
for (int i=1;i<=n;++i)
{
if (a[i]-a[p]<tmp)
{
cnt++;
if (cnt>m)
return 0;
}
else
p=i;
}
return 1;
}
int main()
{
cin>>l>>n>>m;
for (int i=1;i<=n;++i)
cin>>a[i];
int left=1,right=l,mid;
while(left<right)
{
mid=(left+right+1)/2;
if (check(mid))
left=mid;
else
right=mid-1;
}
cout<<left;
return 0;
}
为什么!!!