#include <bits/stdc++.h>
const int maxn = 500010;
using namespace std;
int a[maxn];
int l,n,m;//起点到终点的距离,起点和终点之间的岩石数,至多移走的岩石数
bool check(int val)
{
int cnt = 0,pre = 0;//当前位置,已经移走的石头数目
for(int i = 1;i < n + 1;i++)
{
if(a[i] - a[pre] < val)cnt++;
else pre = i;
if(cnt > m)return false;
}
return cnt <= m;
}
int main()
{
int ans;
scanf("%d%d%d",&l,&n,&m);
for(int i = 1;i <= n;i++)
scanf("%d",&a[i]);
a[n + 1] = l;
int left = 0,right = l;
while(left <= right)
{
int mid = (left + right) / 2;
if(check(mid))left = mid + 1,ans = mid;
else right = mid - 1;
}
cout<<ans<<endl;
return 0;
}
P2678跳石头
猜你喜欢
转载自blog.csdn.net/qq_42937838/article/details/108967853
今日推荐
周排行