跳石头1标准last(时时回顾)
include <bits/stdc++.h>
using namespace std;
// 二分查找函数,用于查找最大最小跳跃距离
int two_k(int left, int right, const vector
if (left > right) return right;
int mid = left + (right - left) / 2;
int cnt = 0;
int last = 0; // 上一个保留的岩石位置
// 遍历所有岩石,模拟移除操作
for(int i = 1; i < arr.size(); ++i){
if(arr[i] - arr[last] < mid){
cnt++; // 需要移除当前岩石
if(cnt > m){
break; // 超过允许移除数量,提前退出
}
}
else{
last = i; // 保留当前岩石
}
}
if(cnt > m){
// 如果需要移除的岩石数量超过了 M,说明 mid 太大
return two_k(left, mid - 1, arr, m);
}
else{
// 否则,尝试更大的 mid
return two_k(mid + 1, right, arr, m);
}
}
int main(){
int l, n, m;
cin >> l >> n >> m;
vector
// 添加起点
arr.push_back(0);
// 读取中间的岩石位置
for(int i = 0; i < n; ++i){
int num;
cin >> num;
arr.push_back(num);
}
// 添加终点
arr.push_back(l);
int ans = two_k(0, l, arr, m);
cout << ans << endl;
return 0;
}

浙公网安备 33010602011771号