CPU 算力分配(C语言)

题目来自于博主算法大师的专栏:最新华为OD机试C卷+AB卷+OJ(C++JavaJSPy) https://blog.csdn.net/banxia_frontend/category_12225173.html

题目描述

现有两组服务器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的算力尽可能小。

备注

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

示例一

输入
2 2
1 1
2 2
输出
1 2
说明:

从 A 组中选出算力为 1 的 CPU,与 B 组中算力为 2 的进行交换,使两组服务器的算力都等于 3。

示例二

输入
2 2
1 2
2 3
输出
1 2

解题思路

解题思路如下:

  1. 读取输入

    • 首先,从标准输入中读取两组服务器的CPU数量(l1 和 l2)。
    • 然后分别读取A组和B组每个CPU的算力值,并计算每组服务器的初始总算力(sumA 和 sumB)。
  2. 计算目标差值

    • 由于要使两组服务器的算力相等,可以计算两者算力之差并除以2,得到一个目标差值 key。这样在交换一个CPU之后,可以使两组的算力平衡。
  3. 查找最优交换组合

    • 遍历A组中的每一个CPU,对于每个CPU算力A[i],找到与 key 的差值diff = A[i] - key。
    • 再遍历B组中的CPU,查找是否存在一个CPU的算力等于这个差值 diff。
    • 如果找到了这样的匹配,即找到了一个可以从A组选出且算力尽可能小、同时能使两组算力平衡的CPU与一个来自B组的CPU进行交换。
  4. 输出结果

    • 当找到满足条件的交换组合时,立即输出这两个CPU的算力值,并结束程序。

假设了A组的初始算力大于或等于B组的初始算力,因此直接取两组算力之差的一半作为目标差值。如果实际情况需要考虑两组算力可能互为大小关系,则需对目标差值的计算进行修正,确保找到正确且最小的交换算力。不过根据题目描述,答案肯定存在,所以这里采用的简化方法是可行的。

代码

#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 主函数入口
int main() {// 读取A组和B组服务器的CPU数量int l1, l2;scanf("%d %d", &l1, &l2);// 定义数组存储A组每个CPU的算力,并初始化A组总算力为0int A[l1];int sumA = 0;// 读取并累加A组所有CPU的算力for (int i = 0; i < l1; i++) {scanf("%d", &A[i]);sumA += A[i];  // 更新A组总算力}// 定义数组存储B组每个CPU的算力,并初始化B组总算力为0int B[l2];int sumB = 0;// 读取并累加B组所有CPU的算力for (int i = 0; i < l2; i++) {scanf("%d", &B[i]);sumB += B[i];  // 更新B组总算力}// 计算使得两组服务器算力相等时,需要交换的CPU算力差值(key)// key = |sumA - sumB| / 2,这里假设sumA > sumB,所以直接取sumA - sumB的一半int key = (sumA - sumB) / 2;// 遍历A组中的每个CPU,寻找与key值最接近且不大于key的CPU算力for (int i = 0; i < l1; i++) {// 计算当前CPU与目标差值的绝对差值int diff = A[i] - key;// 如果这个差值在B组中存在,则找到了符合条件的交换组合for (int j = 0; j < l2; j++) {if (B[j] == diff) {  // 当找到一个与diff相等的B组CPU算力时printf("%d %d", A[i], B[j]);  // 输出从A组选出的CPU算力和从B组选出的CPU算力return 0;  // 找到答案后立即结束程序}}}// 如果未找到合适的交换组合,则理论上不应该执行到这里(根据题设保证存在解)return 0;  // 程序正常结束
}

暴力解法

#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int sum(int num[], int length) {int total = 0;for (int i = 0; i < length; i++) {total += num[i];}return total;
}
void swap(int arrayA[], int arrayB[], int indexA, int indexB) {// 临时变量用于存储值int temp = arrayA[indexA];arrayA[indexA] = arrayB[indexB];arrayB[indexB] = temp;
}
int main() {int l1, l2;scanf("%d %d", &l1, &l2);int A[l1];for (int i = 0; i < l1; i++) {scanf("%d", &A[i]);}int B[l2];for (int i = 0; i < l2; i++) {scanf("%d", &B[i]);}int diff;for (int i = 0; i < l1; i++) {for (int j = 0; j < l2; j++) {swap(A, B, i, j);diff = sum(A, l1) - sum(B, l2);if (diff != 0) {swap(A, B, i, j);} else {printf("%d %d\n", B[j], A[i]);//因为B[j]和 A[i]交换了,所以输出的是原来的A[i],B[j]return 0;}}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习学习脉络】

机器学习学习脉络 基础知识 数学基础 线性代数概率论与数理统计微积分最优化理论 编程基础 Python编程语言数据结构与算法软件工程原则 计算机科学基础 操作系统网络通信数据库系统 机器学习概论 定义与发展历程机器学习的主要任务和应用领域基本术语和概念 监督学习 线…

15:00面试,15:06就出来了,问的问题过于变态了。。。

我从一家小公司转投到另一家公司&#xff0c;期待着新的工作环境和机会。然而&#xff0c;新公司的加班文化让我有些始料未及。虽然薪资相对较高&#xff0c;但长时间的工作和缺乏休息使我身心俱疲。 就在我逐渐适应这种高强度的工作节奏时&#xff0c;公司突然宣布了一则令人…

蓝桥杯-最小砝码

知识点&#xff1a;本题主要考察任何一个物体都可以用 3进制表示。 #include <iostream> #include<cmath> using namespace std; //知识点:任何一个物体都可以用 3进制表示 int main() { int n; cin >> n; int sum 0; for (int i 0;; i)…

多表联合分页查询(一)----数据库与返回实体类准备

目录 一、数据库表准备1.文章表2.用户表3.用户详细信息表4.用户点赞表5.用户评论表 二、需求描述三、返回实体类 一、数据库表准备 1.文章表 CREATE TABLE yan_article (id bigint(20) NOT NULL,summary varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NU…

vue2实现无感刷新token

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4d8; 引言&#xff1a; &#x1f4…

【Vue3】学习watch监视:深入了解Vue3响应式系统的核心功能(上)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

携程token算法分析

声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 这里只是我分析的分析过程,以及一些重要点的记录…

[云原生] k8s中kubectl陈述式资源管理

一、管理k8s核心资源的两种基本方法 陈述式资源管理方法 --主要依赖命令行工具kubectl进行管理 优点 可以满足90%以上的使用场景 对资源的增、删、查操作比较容易 缺点 命令冗长&#xff0c;复杂&#xff0c;难以记忆 特定场景下&#xff0c;无法实现管理需求 对资源的修改…

每日汇评:英镑可能走高,而1.2650支撑位保持不变

英镑/美元上周收于正值区域&#xff1b; 1.2650是该货币对的关键近期支撑位&#xff1b; 如果市场情绪恶化&#xff0c;该货币对的上涨空间可能仍然有限&#xff1b; 英镑/美元利用围绕美元的广泛抛售压力&#xff0c;自 1 月初以来首次录得周涨幅。 周一早盘该货币对稳定在 1.…

TF-A之供应链威胁模型分析

目录 一、简介 二、TF-A 概述 2.1、TF-A 存储库 2.2、外部依赖 2.3、附加二进制文件 2.4、TF-A工具链 2.5、基础设施 三、TF-A

Premiere企业发展历程公司历史回顾视频制作pr时间线模板

企业发展历程公司历史回顾视频制作PR时间线模板mogrt。 项目特点&#xff1a;色彩控件&#xff0c;适用于任何字体&#xff0c;包含视频帮助&#xff0c;适用于Premiere Pro 2021及以上版本。 更多PR资源下载&#xff1a;https://prmuban.com/37916.html

java环境搭建

1.jdk下载安装 下载 https://www.oracle.com/java/technologies/downloads/ jdk21 安装完成 java.exe是执行程序 javac.exe是编译工具 配置JAVA_HOME 环境变量 java环境变量设为变量JAVA_HOME 加上bin,以后只用更改JAVA_HOME地址即可 2.idea安装 下载 https://www.jet…

UDP套接字使用connect函数

在Linux环境下&#xff0c;UDP套接字可以使用connect函数。虽然UDP是无连接的协议&#xff0c;但是使用connect函数可以为UDP套接字设置一个默认的目标地址。 这样做有几个好处&#xff1a; 减少发送数据时的参数&#xff1a;当你使用connect函数为UDP套接字设置了一个目标地址…

Python 开发转 Java 简易路线 - 完结

有了 Python 开发基础&#xff0c;Java 的内容都可以快速过一遍&#xff0c;复杂地方跟着写一遍。 个人博客&#xff08;可参考&#xff09;&#xff1a;https://itnxd.eu.org/ 一、基础 1、Java 基础&#xff1a;尚硅谷 - Java基础 全部快速过一遍&#xff0c; 2、数据库&a…

动态规划(算法竞赛、蓝桥杯)--最详细的01背包DP问题滚动数组优化

1、B站视频链接&#xff1a;E08【模板】背包DP 01背包_哔哩哔哩_bilibili 题目链接&#xff1a;[USACO07DEC] Charm Bracelet S - 洛谷 #include <bits/stdc.h> using namespace std; const int N3410,M13000; int n,m; int d[N],w[N],f[N][M];//价值、体积、状态数组 …

Linux 软链接与硬链接

目录 创建软链接 创建硬链接 删除软链接 软链与硬链区别 创建软链接 软链接是一个指向另一个文件或目录的引用&#xff0c;类似于Windows系统中的快捷方式。 ln -s [目标文件路径] [链接文件名] 例如&#xff0c;要在当前目录下创建一个名为link_file的软链接&#xff0c…

Odoo系统安装部署并结合内网穿透实现固定域名访问本地ERP系统

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

AP5219 DC-DC降压恒流芯片 2.5A 全亮 半亮 摩托电动车灯IC

产品描述 AP5219 是一款 PWM工作模式, 高效率、外 围简单、内置功率管&#xff0c;适用于 5V&#xff5e;100V 输入的高 精度降压 LED 恒流驱动芯片。输出最大功率可达 25W&#xff0c;最大电流 2.5A。 AP5219 可实现全亮/半亮功能切换&#xff0c;通过 MODE 切换&#x…

Docker基础(二)

文章目录 1. 可视化工具2. Docker镜像详解2.1 镜像commit 3. 容器数据卷3.1 使用数据卷3.2 安装mysql实操案例3.3 Dockerfile挂载数据卷3.4 具名挂载和匿名挂载3.5 数据卷容器 4. DockerFile4.1 构建一个自己的centos4.2 编写DockerFile步骤 5. 发布镜像5.1 共有仓库5.2 私有仓…

代码随想录训练营第41天| 卡码网46. 携带研究材料、416. 分割等和子集

46. 携带研究材料 题目链接&#xff1a;题目页面 (kamacoder.com) 二维dp数组&#xff1a; import java.util.*; public class Main{public static void main(String[] args) {Scanner sc new Scanner(System.in);int m sc.nextInt();int n sc.nextInt();int[] space ne…