#include <iostream>
using namespace std;
const int N = 50010;
int L, n, m;
int d[N];
bool check(int mid)
{
int last = 0, cnt = 0;
for (int i = 1; i <= n; i ++ )
if (d[i] - last < mid) cnt ++ ;//把d[i]移走
else last = d[i];//更新成当前这块
return cnt <= m;
}
int main()
{
scanf("%d%d%d", &L, &n, &m);
for (int i = 1; i <= n; i ++ ) cin >> d[i];
d[ ++ n] = L;
int l = 0, r = 1e9;
while (l < r)
{
int mid = l + r + 1 >> 1;
if (check(mid)) l = mid;
else r = mid - 1;
}
printf("%d\n", r);
return 0;
}
跳石头——NOIP2015提高组
于 2023-02-09 08:58:31 首次发布
该程序读取n个整数d[i]和一个目标值m,利用二分查找确定在不增加超过m个间隔的情况下,最大的区间长度。主要逻辑集中在`check`函数中,检查给定的区间长度是否满足条件。最后输出满足条件的最大区间长度。
摘要由CSDN通过智能技术生成