E卷-CPU算力分配-100分

E卷-刷题笔记合集🔗

题目描述

现有两组服务器A和B,每组有多个算力不同的CPU。其中:

  • 表示A组第i个CPU的运算能力
  • 表示B组第i个CPU的运算能力
  • 一组服务器的总算力是各CPU的算力之和

为了让两组服务器的算力相等,允许从每组各选出一个CPU进行一次交换。请找出用于交换的两个CPU的算力值,要求从A组选出的CPU算力尽可能小。

输入格式

输入包含多组测试数据,每组数据包含三行:

第一行输入两个整数 ,以空格分隔:

  • 表示A组服务器中的CPU数量
  • 表示B组服务器中的CPU数量

第二行输入 个整数,表示A组服务器中各个CPU的算力值。

第三行输入 个整数,表示B组服务器中各个CPU的算力值。

输出格式

对于每组测试数据,输出一行,包含两个整数,以空格分隔:

  • 第一个整数表示从A组选出的CPU算力
  • 第二个整数表示从B组选出的CPU算力

要求从A组选出的CPU的算力尽可能小。

样例输入1

2 2
1 1
2 2

样例输出1

1 2

样例解释1

从A组中选出算力为1的CPU,与B组中算力为2的CPU进行交换,使两组服务器的算力都等于3。

样例输入2

3 2
1 2 5
2 4

样例输出2

5 4

数据范围

提示

  1. 保证两组服务器的初始总算力不同
  2. 保证答案一定存在
  3. 注意处理多组测试数据

题解

这是一个数学推导和查找的问题。

解题思路:

  1. 数学推导: 设A组总算力为sumA,B组总算力为sumB 交换a和b后两组算力相等,可得: sumA - a + b = sumB - b + a sumA - sumB = 2(a - b) a - b = (sumA - sumB)/2

  2. 算法步骤:

    • 计算两组初始总算力sumA和sumB
    • 计算half_diff = (sumA - sumB)/2
    • 遍历A组每个算力值a
    • 计算对应的b = a - half_diff
    • 如果b存在于B组且当前a是最小的可行解,则更新答案
  3. 关键点:

    • 使用集合存储B组算力值加速查找
    • 记录并更新A组最小的可行解
    • 处理多组测试数据的输入

参考代码

def read_input():
    """读取输入数据"""
    l1, l2 = map(int, input().split())
    group_a = list(map(int, input().split()))
    group_b = list(map(int, input().split()))
    return l1, l2, group_a, group_b

def calculate_sums(group_a, group_b):
    """计算两组的总算力"""
    sum_a = sum(group_a)
    sum_b = sum(group_b)
    return sum_a, sum_b

def find_min_swap(group_a, group_b, sum_a, sum_b):
    """查找最小交换的CPU算力"""
    half_diff = (sum_a - sum_b) // 2
    set_b = set(group_b)
    
    min_a = float('inf')
    result = None
    
    for a in group_a:
        b = a - half_diff
        if b in set_b and a < min_a:
            min_a = a
            result = (a, b)
    
    return result

def solve():
    while True:
        try:
            l1, l2, group_a, group_b = read_input()
            sum_a, sum

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论

相关推荐

刷到过很多实习生和mentor处成哥们儿的帖子,看完大概率会羡慕这种亲近的上下级关系。但我想说,不管你跟带教的关系有多铁或者多僵,都得拎清课题分离这事儿,工作的边界感千万不能乱踩!📝&nbsp;下面这几条雷区,实习生们可千万别踩!1.别越级瞎提建议除非带教主动问你想法,否则别愣头愣脑地凑上去说&nbsp;“我觉得你应该咋样咋样”。咱就管好自己那一亩三分地,把本职工作干明白就够了,别瞎操心不属于自己的事儿。2.别卖队友换好感❌那种把实习生之间的小秘密捅出去,就为了换带教或者同事认可的操作,纯纯是作死。尤其是那些会影响到别人的话,比如&nbsp;“她就是嫌通勤远才请假”“他们偷偷建了个小群吐槽”,这话一出口,不仅把同事的信任踩碎了,自己还得惹一身麻烦。3.别养成反驳甩锅的臭毛病📗犯了错第一反应别是找借口、甩锅,那没啥用。不如沉下心复盘问题出在哪儿,琢磨个解决方案出来,保证下次不再掉坑里,这才是正经事。4.别瞎掺和正职的八卦我之前实习的组氛围贼好,正职们经常聊对象、聊恋爱进展啥的。但人家正职能聊,不代表咱实习生能跟着掺和。乖乖当个安静的吃瓜群众,竖起耳朵听着就行,别瞎插嘴,当个小透明准没错👂4.别随便评价别人的人品背后嚼舌根说别人咋样咋样,很容易让人觉得你没分寸。你聊啥,别人就可能觉得你认同啥,职场里保持中立,少议论人,才是最稳的。
omega@1112:唯一的大雷其实是不要问mentor的薪资待遇
mt对你说过最有启发的一...
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务