题目传送门:在此
二分答案即可,注意 isvalid 函数的编写。
#include <bits/stdc++.h>
using namespace std;
bool isvalid(const vector<int>& v, int r, int k) {
int i = 0, t = v[0] + 2 * r;
--k;
while (i < (int)v.size()) {
if (v[i] <= t) {
++i;
} else {
--k;
t = v[i] + 2 * r;
}
}
return k >= 0;
}
int main(void) {
int n, k;
cin >> n >> k;
vector<int> v;
while (n--) {
int t;
cin >> t;
v.push_back(t);
}
sort(begin(v), end(v));
int len = v.size();
int l = 0, r = v[len - 1] - v[0] / k;
while (l <= r) {
int m = l + (r - l) / 2;
if (isvalid(v, m, k)) {
r = m - 1;
} else {
l = m + 1;
}
}
cout << l;
return 0;
}