bzoj3969 [WF2013]Low Power

时间:2023-03-09 16:29:55
bzoj3969 [WF2013]Low Power

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3969

【题解】

二分答案x,贪心选取,如果选取了i个,有j对,那么要满足i<=2*j*k(不然有数就没位置放了)

# include <stdio.h>
# include <string.h>
# include <iostream>
# include <algorithm>
// # include <bits/stdc++.h> using namespace std; typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int M = 2e6 + ;
const int mod = 1e9+; # define RG register
# define ST static int n, k, N;
int a[M]; inline bool chk(int x) {
int times = ;
for (int i=; i<=N; ++i) {
if(i- > *times*k) return false;
if(i <= N && a[i+] - a[i] <= x) ++i, ++times;
if(times == n) return ;
}
return false;
} int main() {
cin >> n >> k; N = *n*k;
for (int i=; i<=N; ++i) scanf("%d", a+i);
sort(a+, a+N+);
int l = a[] - a[], r = 1e9, ans;
while() {
if(r-l <= ) {
for (int i=l; i<=r; ++i) {
if(chk(i)) {
ans = i;
break;
}
}
break;
}
int mid = l+r>>;
if(chk(mid)) r = mid;
else l = mid;
}
cout << ans << endl;
return ;
}