以下用例
8 3 1
2
4
7
洛谷给的output是2;
但是我们看如果去掉石头2,那么剩下的石头里(0,4,7,8)中最短跳跃距离的最大值,也即相邻两块石头4和7之间的最大值是3;3是比output中给出的2还要大的;
以下是我90分的code,上述用例输出3
#include <iostream>
#include <algorithm>
using namespace std;
int l, n, m;
// int dis[100000];
int dis[10];
bool judge(int x){
int cnt = 0, cur = 0;
int max_dis = l;
for(int i=1; i<=n; i++){
if(x > max_dis){
continue;
}
//在剩下的n-m+2石头中, 找到两两之间距离>=x的石头数目
if(dis[i] - dis[cur] >= x){
cnt++;
cur = i;
}
}
//拿走m块石头转换为保留至少n-m块石头
return cnt >= n-m;
}
int main(){
cin >> l >> n >> m;
for(int i = 1; i<=n; i++){
cin >> dis[i];
}
dis[n+1] = l;
int left = 0, r = l +1 , mid = 0;
while(left + 1 !=r){
mid = (left+r) /2;
if(judge(mid)){
left = mid;
}else{
r = mid;
}
}
cout << left << endl;
return 0;
}