最新华为OD机试真题-CPU算力分配(100分)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员
✨ 本系列打算持续跟新 华为OD机试-D卷 的三语言AC题解
👏 感谢大家的订阅➕ 和 喜欢💗
📎在线评测链接
🌍 评测功能需要订阅专栏后私信联系清隆解锁~
🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~
🍓OJ题目截图
📡 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在线评测