#include <iostream>
#include <vector>
using namespace std;
bool check(int mid, const vector<int>& positions, int k) {
int cnt = 0; // 新增的路标数量
for (int i = 0; i < positions.size() - 1; ++i) {
int distance = positions[i + 1] - positions[i];
if (distance > mid) {
// 如果间距超过mid,需要放置额外的路标
cnt += (distance - 1) / mid;
}
if (cnt > k) return false;
}
return true;
}
int main() {
int L, N, K;
cin >> L >> N >> K;
vector<int> positions(N);
for (int i = 0; i < N; ++i) {
cin >> positions[i];
}
int low = 1; // 间隙最少为1
int high = L; // 最大值为L长度
while (low < high) {
int mid = (low + high) / 2;
if (check(mid, positions, K)) {
high = mid;
} else {
low = mid + 1;
}
}
cout << low << endl;
return 0;
}
这个虽然是AC代码,但是不符合常理
输入: 101 3 1
0 101 40
应该输出:
40
实际输出:
51
如果应该输出中算错了,总之不可能是51,可以画图理解。