OD C卷 - CPU算力分配

CPU算力分配

  • 两组服务器A、B, 每组有多个算力不同的CPU;
  • 为了让两组服务器的算力和相等,允许两组各选出一个CPU进行一次交换;
  • 求两组中用于交换的CPU算力,从A中选出的算力尽可能小;

输入描述:

第一行 输入L1, L2 表示A、B组的CPU数量;

第二行输入A组服务器中的CPU算力;

第三行输入B组服务器的CPU算力;
输出描述:

A、B组选出的CPU算力,以空格分开; 保证初始两组算力和不同,且答案肯定存在;

示例1

输入:

2 2

1 1

2 2

输出:

1 2

示例2

输入:

2 2

1 2

2 3

输出:

1 2

示例3

输入:

3 2

1 2 5

2 4

输出:

5 4

思路:

  • A数组升序排序,B数组升序排序;
  • 遍历A数组的每个元素 A [ i ] A[i] A[i],根据公式求对应的目标值tgt,是否在B数组中;
    • 交换一次后,存在公式 ∑ A − A i + B i = ∑ B − B i + A i \sum A - A_i + B_i = \sum B - B_i + A_i ∑A−Ai+Bi=∑B−Bi+Ai
    • 代码形式 tgt = A[i] - (sum(A) - sum(B)) // 2
    • 如果tgt 在B数组中存在,则结束对A的循环;
    • 时间复杂度 O(nlogn)
python 复制代码
a_len, b_len = list(map(int, input().strip().split()))

a_arr = list(map(int, input().strip().split()))
a_sum = sum(a_arr)
b_arr = list(map(int, input().strip().split()))
b_sum = sum(b_arr)

a_arr.sort()
b_arr.sort()
i = 0
while i < a_len:  # O(n) + O(nlogn)
    target = a_arr[i] - (a_sum - b_sum) // 2
    if target in b_arr:
        print(str(a_arr[i]) + " " + str(target))
        break

    i += 1
 
相关推荐
laufing3 个月前
OD C卷 - 幼儿园篮球游戏
双指针·python算法
laufing3 个月前
OD C卷 - 结对编程
python算法·条件计算
laufing3 个月前
OD C卷 - 5G网络建设
·并查集·python算法
laufing3 个月前
OD C卷 - 小扇和小船的数字游戏
二进制·python算法
laufing4 个月前
OD C卷 - 最多购买宝石数目
滑动窗口·python算法
laufing4 个月前
OD C卷 - 宽度最小的子矩阵
滑动窗口·python算法
laufing4 个月前
OD C卷 - 体育场找座位
逻辑分析·python算法
哪 吒1 年前
华为OD机试 - 热点网站统计 - 逻辑分析(Java 2023 B卷 100分)
java·开发语言·华为od·七日集训·逻辑分析