组队赛(一)F - Low Power

解决如何为机器的芯片分配电池以使得各机器内部功率差异最小的问题,采用二分查找结合贪心策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值