#include<iostream>
using namespace std;
int a[50005]; // 石头可以放置的位置
int find(int n, int num, int MAX) { //可以放石头位置的最大索引,石头个数,两块石头之间的最大距离
int MIN = 1; //可能的距离是1~MAX
while(MAX > MIN) {
int mid = MAX - (MAX - MIN) / 2;
int pre = 0;
int now = pre+1;
int remain = num;
while(remain > 0) {
while(a[now]-a[pre] < mid && now < n) now++;
if(a[now] - a[pre] >= mid) {
remain--;
pre = now;
now++;
}else break;
}
if(remain == 0) MIN = mid;
else MAX = mid-1;
}
return MIN;
}
int main() {
int l, n, m;
cin >> l >> n >> m;
for(int i = 1; i <= n; i++) cin >> a[i];
a[0] = 0;
int MAX = l/(n-m+1);
cout << find(n, n-m, MAX);
return 0;
}
代码没有考虑最后一块石头到终点的距离但是已AC