华为OD机试真题 - CPU算力分配 (D卷,100分)

题目描述

现有两组服务器A和B,每组有多个算力不同的CPU,其中 A[i] 是 A 组第 i 个CPU的运算能力,B[i] 是 B组 第 i 个CPU的运算能力。

一组服务器的总算力是各CPU的算力之和。

为了让两组服务器的算力相等,允许从每组各选出一个CPU进行一次交换,

求两组服务器中,用于交换的CPU的算力,并且要求从A组服务器中选出的CPU,算力尽可能小。

输入描述

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

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

第三行输入为B组服务器中各个CPU的算力值,以空格分隔。

  • 1 ≤ L1 ≤ 10000
  • 1 ≤ L2 ≤ 10000
  • 1 ≤ A[i] ≤ 100000
  • 1 ≤ B[i] ≤ 100000

输出描述

对于每组测试数据,输出两个整数,以空格分隔,依次表示A组选出的CPU算力,B组选出的CPU算力。

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

备注

  • 保证两组服务器的初始总算力不同。
  • 答案肯定存在

用例

题目解析

  1. 首先,计算A组服务器的算力总和sum_A和B组服务器的算力总和sum_B。
  2. 然后,遍历A组服务器中的每个CPU,计算将该CPU与B组服务器中任意一个CPU交换后,两组服务器的算力之差。
  3. 在遍历过程中,记录最小的算力差值min_diff以及对应的A组和B组选出的CPU算力。
  4. 最后,输出A组选出的CPU算力和B组选出的CPU算力。

JS算法源码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () { 
  while (true) {
    try {
      const [l1, l2] = (await readline()).split(" ").map(Number);

      const A = (await readline()).split(" ").map(Number);
      const B = (await readline()).split(" ").map(Number);

      let sumA = 0;
      for (let a of A) {
        sumA += a;
      }

      let sumB = 0;
      const setB = new Set();

      for (let b of B) {
        sumB += b;
        setB.add(b);
      }
 
      const half_diff = (sumA - sumB) / 2;
 
      let minA = Infinity; 
      let ans = "";

      for (let a of A) {
        const b = a - half_diff;

        if (setB.has(b)) {
          if (a < minA) {
            minA = a;
            ans = `${a} ${b}`;
          }
        }
      }

      console.log(ans);
    } catch (e) {
      break;
    }
  }
})();


Java算法源码

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    while (true) {
      String[] input = br.readLine().split(" ");
  

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

2024华为OD机试题库D卷 文章被收录于专栏

2024年5-11月份考的D卷,不用再看AB卷,CD卷题目一样。多种语言解法,欢迎提供更好的解法。

全部评论
机试350分,十分感谢
点赞
送花
回复 分享
发布于 06-20 16:20 广东

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务