当前位置:   article > 正文

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

[华为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,值输出就可以了

代码:

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.List;
  4. import java.util.Scanner;
  5. public class SwitchCpu {
  6. public static void main(String[] args) {
  7. Scanner sc = new Scanner(System.in);
  8. String[] cpuNums = sc.nextLine().split(" ");
  9. int cpu1 = Integer.valueOf(cpuNums[0]);
  10. int cpu2 = Integer.valueOf(cpuNums[1]);
  11. String[] cpu1s = sc.nextLine().split(" ");
  12. List<Integer> cpuOne = new ArrayList<>();
  13. int totalCpuOne = 0;
  14. for(int i=0;i<cpu1s.length;i++){
  15. cpuOne.add(Integer.valueOf(cpu1s[i]));
  16. totalCpuOne +=cpuOne.get(i);
  17. }
  18. String[] cpu2s = sc.nextLine().split(" ");
  19. int[] cpuTwo = new int[cpu1s.length];
  20. int totalCpuTwo = 0;
  21. for(int i=0;i<cpu2s.length;i++){
  22. cpuTwo[i] = Integer.valueOf(cpu2s[i]);
  23. totalCpuTwo +=cpuTwo[i];
  24. }
  25. Collections.sort(cpuOne);
  26. int dis = totalCpuTwo - totalCpuOne;
  27. //题目里面说必然存在 那么dis 必然是偶数 否则totalCpuTwo+totalCpuOne 就是奇数了,不可能存在符合条件的方案
  28. int changeCpuOne = 0;
  29. int changeCpuTwo = 0;
  30. for(int i = 0;i<cpuOne.size();i++){
  31. for(int j =0;j<cpuTwo.length;j++){
  32. if(cpuTwo[j]-cpuOne.get(i) == dis/2){
  33. changeCpuOne = cpuOne.get(i);
  34. changeCpuTwo = cpuTwo[j];
  35. break;
  36. }
  37. }
  38. }
  39. System.out.println(changeCpuOne+" "+changeCpuTwo);
  40. }
  41. }

验证:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/531866
推荐阅读
相关标签
  

闽ICP备14008679号