6398 Low Power
You are building advanced chips for machines. Making the chips is easy, but the power supply turns
out to be an issue since the available batteries have varied power outputs.
Consider the problem of n machines, each with two chips, where each chip is powered by k batteries.
Surprisingly, it does not matter how much power each chip gets, but a machine works best when its
two chips have power outputs as close as possible. The power output of a chip is simply the smallest
power output of its k batteries.
You have a stockpile of 2nk batteries that you want to assign to the chips. It might not be possible
to allocate the batteries so that in every machine both chips have equal power outputs, but you want
to allocate them so that the di erences are as small as possible. To be precise, you want to tell your
customers that in all machines the di erence of power outputs of the two chips is at most d, and you
want to make d as small as possible. To do this you must determine an optimal allocation of the
batteries to the machines.
Consider Sample Input 1. There are 2 machines, each requiring 3 batteries per chip, and a supply
of batteries with power outputs 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12. You can, for instance, assign the
batteries with power outputs 1, 3, 5 to one chip, those with power 2, 4, 12 to the other chip of the same
machine, those with power 6, 8, 9 to the third chip, and those with power 7, 10, 11 to the fourth. The
power outputs of the chips are 1, 2, 6, and 7, respectively, and the di erence between power outputs is
1 in both machines. Note that there are many other ways to achieve this result.
Input
The input consists of several test cases. A test case consists of two lines. The rst line contains two
positive integers: the number of machines n and the number of batteries per chip k (2nk 106
). The
second line contains 2nk integers pi specifying the power outputs of the batteries (1 pi 109
).
Output
For each test case, display the smallest number d such that you can allocate the batteries so that the
di erence of power outputs of the two chips in each machine is at most d.
Sample Input
2 3
1 2 3 4 5 6 7 8 9 10 11 12
2 2
3 1 3 3 3 3 3 3
Sample Output
1
You are building advanced chips for machines. Making the chips is easy, but the power supply turns
out to be an issue since the available batteries have varied power outputs.
Consider the problem of n machines, each with two chips, where each chip is powered by k batteries.
Surprisingly, it does not matter how much power each chip gets, but a machine works best when its
two chips have power outputs as close as possible. The power output of a chip is simply the smallest
power output of its k batteries.
You have a stockpile of 2nk batteries that you want to assign to the chips. It might not be possible
to allocate the batteries so that in every machine both chips have equal power outputs, but you want
to allocate them so that the di erences are as small as possible. To be precise, you want to tell your
customers that in all machines the di erence of power outputs of the two chips is at most d, and you
want to make d as small as possible. To do this you must determine an optimal allocation of the
batteries to the machines.
Consider Sample Input 1. There are 2 machines, each requiring 3 batteries per chip, and a supply
of batteries with power outputs 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12. You can, for instance, assign the
batteries with power outputs 1, 3, 5 to one chip, those with power 2, 4, 12 to the other chip of the same
machine, those with power 6, 8, 9 to the third chip, and those with power 7, 10, 11 to the fourth. The
power outputs of the chips are 1, 2, 6, and 7, respectively, and the di erence between power outputs is
1 in both machines. Note that there are many other ways to achieve this result.
Input
The input consists of several test cases. A test case consists of two lines. The rst line contains two
positive integers: the number of machines n and the number of batteries per chip k (2nk 106
). The
second line contains 2nk integers pi specifying the power outputs of the batteries (1 pi 109
).
Output
For each test case, display the smallest number d such that you can allocate the batteries so that the
di erence of power outputs of the two chips in each machine is at most d.
Sample Input
2 3
1 2 3 4 5 6 7 8 9 10 11 12
2 2
3 1 3 3 3 3 3 3
Sample Output
1
2
题目的意思就是给你2nk个零件,然后n辆车,每辆车2个部分,一部分要k个零件,车的功率既是两部分min的值相减,要使这个值尽量的小,求出这个值。
也有贪心的思想在里面,不过没有想到用二分搜+暴力。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxnk = 1000006;
int max(int a, int b){return a > b ? a : b;}
int min(int a, int b){return a < b ? a : b;}
int n, k, nk;
int chips[maxnk];
bool check(int w)
{
for(int p=1,q=0; q<n; ++p)
{
if(p-1 > q*2*k)return false;
if(chips[p + 1] - chips[p] <= w) ++p, ++q;
}
return true;
}
int solve(int l, int r)
{
int mid;
while(l < r)
{
mid = (l + r) >> 1;
if(check(mid)) r = mid;
else l = mid + 1;;
}
return l;
}
int main()
{
while(scanf("%d%d", &n, &k) != EOF)
{
nk = 2*n*k; int Max = 0;
for(int i = 1; i <= nk; ++i)
{
scanf("%d",&chips[i]);
Max = max(Max, chips[i]);
}
sort(chips + 1, chips + nk + 1);
int ans = solve(0, Max);
printf("%d\n", ans);
}
return 0;
}