最新华为OD机试真题-CPU算力分配(100分)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新 华为OD机试-D卷 的三语言AC题解

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

=> CPU算力分配(100分) <=

🌍 评测功能需要订阅专栏后私信联系清隆解锁~

华为OD

🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~

🍓OJ题目截图

alt

📡 CPU算力分配

问题描述

K小姐是某公司运营部门的主管,最近她需要对公司的两组服务器进行算力分配。每组服务器有多个算力不同的 ,其中 组第 的运算能力为 ,而 组第 的运算能力为 。一组服务器的总算力是各 的算力之和。

为了让两组服务器的算力相等,K小姐允许从每组各选出一个 进行一次交换。她希望从 组服务器中选出算力尽可能小的 来交换,你能帮她计算出应该选择哪两个 进行交换吗?

输入格式

第一行输入为两个正整数 ,以空格分隔, 表示 组服务器中的 数量, 表示 组服务器中的 数量。
第二行输入为 组服务器中各个 的算力值,以空格分隔。 第三行输入为 组服务器中各个 的算力值,以空格分隔。

输出格式

输出两个整数,以空格分隔,依次表示 组选出的 算力和 组选出的 算力。要求从 组选出的 的算力尽可能小。

样例输入 1

2 2
1 1
2 2

样例输出 1

1 2

样例输入 2

2 2 
1 2
2 2

样例输出 2

1 2

样例输入 3

1 2
2
1 3

样例输出 3

2 3

样例输入 4

3 2
1 2 5
2 4

样例输出 4

5 4

数据范围

题解

要平衡两组服务器的总算力,需要找到一对 CPU ,其算力差可以弥补两组服务器当前算力差的一半。首先,计算两组服务器的算力差,然后在 A 组中找到一个算力尽可能小的 CPU,使得存在一个 CPU 在 B 组中,使得交换后两组服务器算力相等。通过排序和查找的方法,可以有效地找到这样的一对 CPU。

参考代码

  • Python
la, lb = map(int, input().split())
ca = list(map(int, input().split()))
cb = list(map(int, input().split()))
ca.sort()
sum_ca = sum(ca)
sum_cb = sum(cb)
res = -1
for a in ca:
    target = (sum_cb - sum_ca + 2 * a) // 2
    if (sum_cb - sum_ca + 2 * a) % 2 == 0 and target in cb:
        print(a, target)
        res = 0
        break
if res == -1:
    print(res)
  • Cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int la, lb;
    cin >> la >> lb;
    vector<long> ca(la), cb(lb);
    
    for (int i = 0; i < la; i++) {
        cin >> ca[i];
    }
    
    for (int i = 0; i < lb; i++) {
        cin >> cb[i];
    }
    
    sort(ca.begin(), ca.end());
    long sum_ca = accumulate(ca.begin(), ca.end(), 0LL);
    long sum_cb = accumulate(cb.begin(), cb.end(), 0LL);
    int res = -1;
    
    for (long a : ca) {
        long target = (sum_cb - sum_ca + 2 * a) / 2;
        if ((sum_cb - sum_ca + 2 * a) % 2 == 0 && find(cb.begin(), cb.end(), target) != cb.end()) {
            cout << a << " " << target << endl;
            res = 0;
            break;
        }
    }
    
    if (res == -1) {
        cout << res << endl;
    }
    
    return 0;
}

  • Java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int la = scanner.nextInt();
        int lb = scanner.nextInt();
        List<Long> ca = new ArrayList<>(la);
        List<Long> cb = new ArrayList<>(lb);

        for (int i = 0; i < la; i++) {
            ca.add(scanner.nextLong());
        }

        for (int i = 0; i < lb; i++) {
            cb.add(scanner.nextLong());
        }

        Collections.sort(ca);
        long sum_ca = ca.stream().mapToLong(Long::longValue).sum();
        long sum_cb = cb.stream().mapToLong(Long::longValue).sum();
        int res = -1;

        for (long a : ca) {
            long target = (sum_cb - sum_ca + 2 * a) / 2;
            if ((sum_cb - sum_ca + 2 * a) % 2 == 0 && cb.contains(target)) {
                System.out.println(a + " " + target);
                res = 0;
                break;
            }
        }

        if (res == -1) {
            System.out.println(res);
        }
    }
}

#华为##华为OD##笔试##春招##秋招#
最新华为OD机试-D卷 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD-C/D卷的题目汇总和(Java/Cpp/Python)三语言解析 + 提供OJ在线评测

全部评论

相关推荐

1 3 评论
分享
牛客网
牛客企业服务