[华为OD] C卷 服务器cpu交换 现有两组服务器QA和B,每组有多个算力不同的CPU 100

题目:

现有两组服务器QA和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:

输入:

2 2

1 1

2 2

输出:

1 2

说明

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

示例2:

输入:

2 2

1 2 

2 3 

输出 

1 2 

示例3:

输入:

1 2

2

1 3 

输出 

2 3 

示例4:

输入: 

3 2

1 2 5 

2 4 

输出: 

5 4

思路:

相对比较简单,因为题目说了一定存在,那么将A组CPU 转为list,然后排序

算出A,B两组性能差距sum(A)-sum(B),然后按A,B循环遍历,找到cpuB-cpuA = (sum(A)-sum(B))/2的两个cpu,值输出就可以了

代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class SwitchCpu {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] cpuNums = sc.nextLine().split(" ");
        int cpu1 = Integer.valueOf(cpuNums[0]);
        int cpu2 = Integer.valueOf(cpuNums[1]);
        String[] cpu1s = sc.nextLine().split(" ");
        List<Integer> cpuOne = new ArrayList<>();
        int totalCpuOne = 0;
        for(int i=0;i<cpu1s.length;i++){
            cpuOne.add(Integer.valueOf(cpu1s[i]));
            totalCpuOne +=cpuOne.get(i);
        }

        String[] cpu2s = sc.nextLine().split(" ");
        int[] cpuTwo = new int[cpu1s.length];
        int totalCpuTwo = 0;
        for(int i=0;i<cpu2s.length;i++){
            cpuTwo[i] = Integer.valueOf(cpu2s[i]);
            totalCpuTwo +=cpuTwo[i];
        }

        Collections.sort(cpuOne);

        int dis = totalCpuTwo - totalCpuOne;
        //题目里面说必然存在 那么dis 必然是偶数 否则totalCpuTwo+totalCpuOne 就是奇数了,不可能存在符合条件的方案
        int changeCpuOne = 0;
        int changeCpuTwo = 0;
        for(int i = 0;i<cpuOne.size();i++){
            for(int j =0;j<cpuTwo.length;j++){
                if(cpuTwo[j]-cpuOne.get(i) == dis/2){
                    changeCpuOne = cpuOne.get(i);
                    changeCpuTwo = cpuTwo[j];
                    break;
                }
            }
        }

        System.out.println(changeCpuOne+" "+changeCpuTwo);

    }
}

验证:

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-01 07:34:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-01 07:34:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-01 07:34:02       82 阅读
  4. Python语言-面向对象

    2024-05-01 07:34:02       91 阅读

热门阅读

  1. http作业

    2024-05-01 07:34:02       37 阅读
  2. Ae 中 Range Selector 和 Expression Selector 有什么区别?

    2024-05-01 07:34:02       32 阅读
  3. 每天学习一个Linux命令之ldconfig

    2024-05-01 07:34:02       34 阅读
  4. Python学习指南

    2024-05-01 07:34:02       34 阅读
  5. redis运维篇上篇

    2024-05-01 07:34:02       118 阅读
  6. C++——数据结构stack,queue,priority_queue

    2024-05-01 07:34:02       34 阅读
  7. 语言模型:智能化未来的钥匙

    2024-05-01 07:34:02       24 阅读
  8. 在C++中初始化二维数组的几种不同方法

    2024-05-01 07:34:02       32 阅读
  9. Ubuntu22.04 私钥登录

    2024-05-01 07:34:02       104 阅读
  10. 常用网络知识点(网管网工需掌握)

    2024-05-01 07:34:02       26 阅读
  11. 关于chatgpt的理解与探索

    2024-05-01 07:34:02       31 阅读
  12. 移动端适配方案

    2024-05-01 07:34:02       35 阅读