Angry Cows(Silver)
思路
套路二分,我们枚举左端点,把炸弹放到中间,然后check右端点是否在区间,
如果不在区间就重新确定一个爆炸区间范围,投放次数加一,
代码
/*
Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;
const int N = 5e4 + 10;
int a[N], k, n;
bool judge(int x) {
int sum = 0, last = -2 * x;
for(int i = 1; i <= n; i++) {
if(last < a[i] - x) {
sum++;
last = a[i] + x;
}
}
return sum <= k;
}
int main() {
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin >> n >> k;
for(int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + 1 + n);
int l = 0, r = 1e9 + 10;
while(l < r) {
int mid = l + r >> 1;
if(judge(mid)) r = mid;
else l = mid + 1;
}
cout << l << "\n";
return 0;
} 
京公网安备 11010502036488号