硬件资源分配


【华为校园招聘软件】2022-04-13


【编程题目 | 100分】硬件资源分配 [ 2022 校园招聘 考试题 ]


编程题 第1/3题


1、硬件资源分配

题目描述

有M台服务器,每台服务器有以下属性:编号、CPU核数(1~100)、内存、CPU架构(0~8)、是否支持NP加速的标识(0,1)。

然后有一个资源分配要求,要求分配N台满足要求的服务器。

具体如下:CPU核数>=cpuCount、内存>=memSize、CPU架构=cpuArch、是否支持NP加速=supportNP。

其中,cpuCount、memSize、cpuArch、supportNP为这个要求输入的分配参数。

分配时会指定优先级策略,策略如下:

  1. 策略1:CPU优先,优先选择CPU核数满足分配要求并且最接近分配要求的cpuCount。如果CPU核数相同,再按内存满足要求并选择最接近memSize的服务器分配。
  2. 策略2:内存优先,优先选择内存满足分配要求并且最接近分配要求的memSize。如果内存相同,再按cpu核数满足要求并选择最接近cpuCount的服务器分配
  3. 如果两台服务器属性都相同,则按服务器编号从小到大选择(编号不会重复)

输入

第一行:服务器数量M

接下来M行为M台服务器属性的数组

下一行为分配要求:

最大分配数量N,分配策略strategy,cupCount,memSize,cpuArch,supportNP

其中

1<=M<=1000

1<=N<=1000

strategy:1表示策略1,2表示策略2

1<=cpuCount<=100

10<=memSize<=1000

0<=cpuArch<=8,另外,cpuArch使用 9 表示所有服务器架构都满足分配要求

0<=supportNP<=1,另外,为 2 时表示无论是否支持NP加速都满足分配要求

输出

先输出实际分配数量,后按照分配的服务器编号从小到大依次输出,以空格分开

样例1

输入

4

0,2,200,0,1

1,3,400,0,1

2,3,400,1,0

3,3,300,0,1

3 1 3 200 0 1

输出

2 1 3

解释:只有1和3满足要求,要求分配2台服务器,所以结果为2 1 3

样例2

输入

6

0,2,200,0,1

1,4,330,2,1

2,3,400,3,1

3,3,310,1,1

4,3,320,8,1

5,3,330,0,1

3 2 3 300 9 2

(这里注意一下输入的格式,最后一行是空格分开)

输出

3 3 4 5

解释:

  • 编号1~5都满足分配要求,按策略2分配即内存优先,内存>=300并且最接近300的服务器编号是3 4 1 5 2。
  • 其中1和5内存相同,然后会比较CPU,即CPU>=3且最接近的,所以5优先于1.因此最后分配的三台服务器是3 4 5。
  • 输出时先输出数量3,再按编号排序输出3 4 5

代码实现


C++


#include<bits/stdc++.h>

using namespace std;

typedef struct Info {
    int cpuId;
    int cpuCount;
    int memSize;
    int cpuArch;
    int supportNP;

    Info(int cpuId_, int cpuCount_, int memSize_, int cpuArch_, int supportNP_) {
        this->cpuId = cpuId_;
        this->cpuCount = cpuCount_;
        this->memSize = memSize_;
        this->cpuArch = cpuArch_;
        this->supportNP = supportNP_;
    }
} Info;



剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

JAVA


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看