陶陶是个贪玩的孩子,他在地上丢了 AA 个瓶盖,为了简化问题,我们可以当作这 AA 个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出 BB 个,使得距离最近的 22 个距离最大,他想知道,最大可以到多少呢?
输入格式
输出格式
仅一个整数,为所求答案。
样例输入
5 3 1 2 3 4 5
样例输出
2
#include <bits/stdc++.h>
using namespace std;
constexpr int N = 100010;
int a, b;
int arr[N];
bool check(int mid) {
//cout <<"mid:" << mid << endl;
int now = 0;
int cnt = 1;
int next = 0;
while (next < a) {
next++;
if (arr[next] - arr[now] >= mid) {
cnt++;
now = next;
}
}
//cout << cnt << endl;
return cnt >= b;
}
int searchhigh() {
int low = 0;int high = 1e9+10;
while (low < high) {
int mid = low + high + 1 >> 1;
if (check(mid)) low = mid;
else high = mid - 1;
}
return low;
}
int main() {
cin >> a >> b;
for (int i = 0;i <a;i++) {
cin >> arr[i];
}
sort(arr, arr + a);
cout << searchhigh() << endl;
return 0;
}