CPU算力分配 - 华为OD机试题

2024-07-26 13:41:57 浏览数 (2)

题目描述

现有两组服务器A和B,每组有多个算力不同的CPU,其中 A 是A组第个CPU的运算能力,是 B组 第个CPU的运算能力。一组服务器的总算力是各CPU的算力之和。 为了让两组服务器的算力相等,允许从每组各选出一个CPU进行一次交换。 求两组服务器中,用于交换的CPU的算力,并且要求从A组服务器中选出的CPU,算力尽可能小。

输入描述

第一行输入为L1和L2,以空格分隔,L1表示A组服务器中的CPU数量,L2表示B组服务器中的CPU数量

第二行输入为A组服务器中各个CPU的算力值,以空格分隔.

第三行输入为B组服务器中各个CPU的算力值,以空格分隔 1 ≤ L1, L2 ≤ 10000 1 ≤ A[i], B[i] ≤ 100000

输出描述

对于每组测试数据,输出两个整数,以空格分隔,依次表示A组选出的CPU算力,B组选出的CPU算力。要求从A组选出的CPU的算力尽可能小。 备注:保证两组服务器的初始总算力不同,答案肯定存在。

示例一

代码语言:javascript复制
输入:
2 2
1 1
2 2
输出
1 2
说明
从A组中选出算力为1的CPU,与B组中算力为2的进行交换,使两组服务器的算力都等于3

示例二

代码语言:javascript复制
输入:
2 2
1 2
2 3
输出
1 2

示例三

代码语言:javascript复制
输入:
1 2
2
1 3
输出
2 3

实例四

代码语言:javascript复制
输入:
3 2
1 2 5
2 4
输出:
5 4

java题解

题解

代码语言:javascript复制
模拟的题目

解题思路:

计算两组服务器的总算力。
根据总算力的差值,计算出需要交换的差值的一半。
遍历第一组服务器的算力,尝试在第二组服务器中找到合适的算力进行交换,使得两组服务器的总算力相等。
输出找到的交换方案。
代码语言:javascript复制
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.stream.IntStream;

/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int L1 = in.nextInt(), L2 = in.nextInt();
        // A 组服务器
        int[] a = IntStream.range(0, L1).map(i -> in.nextInt()).toArray();
        Arrays.sort(a);
        int sum1 = IntStream.of(a).sum();

        // B组服务器
        int sum2 = 0;
        Set<Integer> b = new HashSet();
        for (int i = 0; i < L2; i  ) {
            int t = in.nextInt();
            b.add(t);
            sum2  = t;
        }

        // A 组服务器应该减少的数量
        int d = (sum1 - sum2) / 2;
        for (int x : a) {
            // B 组是否存在 target ,如果存在则和 target 交换即可 (交换后两组算力相等)
            int target = x - d;
            if (b.contains(target)) {
                System.out.println(String.format("%d %d", x, x - d));
                return;
            }
        }
    }
}

0 人点赞