知识点:二分
这个就是二分判定最简单的应用题,对于满足单调性的题目,我们可以利用二分将求最优解转化为判定问题,同时我们要注意,满足题意的解是在哪半边。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, m, a[N];
bool check(int x) {
int cnt = 1;
int last = a[0];
for (int i = 1; i < n; i++) {
if (a[i] - last >= x) {
cnt++;
last = a[i];
}
}
return cnt >= m;
}
int main() {
int T;
cin >> T;
while (T--) {
cin >> n >> m;
for (int i = 0; i < n; i++) cin >> a[i];
sort(a, a + n);
int l = -1, r = 1e9 + 7;
while (l < r) {
int mid = (l + r + 1) >> 1;
if (check(mid)) l = mid;
else r = mid - 1;
}
cout << l << endl;
}
return 0;
}