2021华为软挑(区域初赛)总结

2021华为软挑(区域初赛)总结

一、案例解析

输入

2  								# 一共两种服务器
(NV603, 92, 324, 53800, 500)
(NV604, 128, 512, 87800, 800)
2  								# 一共两种虚拟机
(c3.large.4, 2, 8, 0)
(c3.8xlarge.2, 32, 64, 1)
3  								# 一共3天
2  								# 第一天一共两种操作
(add, c3.large.4, 5)
(add, c3.large.4, 0)
2  								# 第二天一共2种草祖宗
(del, 0)
(add, c3.8xlarge.2, 1)
3  								# 第三天一共3种操作
(add, c3.large.4, 2)
(del, 1)
(del, 2)

输出

(purchase, 2)  # 第一天购买两台服务器
(NV603, 1)     		# 编号为0,NV603
(NV604, 1)     		# 编号为1,NV604
(migration, 0) 		# 迁移0次
(0, A)		   		# 更具第一天的输入操作,表示id为5的虚拟机部署在第0台服务器的A节点
(0, B)         		# id为0的虚拟机部署在第0太服务器的B节点
(purchase, 0)  # 第二天购买0台服务器
(migration, 0) 		# 迁移0次
(1)					# 更具第二天输入的值,表示id为1的虚拟机部署在第1台服务器上(双节点,不需要配置节点)
(purchase, 0)  # 第三天,购买0台服务器
(migration, 0) 		# 迁移0次
(1, B)		   		# 更具第三天输入的值,表示id为2的虚拟机部署在第1台服务器的B节点

需要注意:双节点配置的时候,由于负载均衡,因此节点A和B同时分担服务器的内存和cpu

二、输入输出详解

输入详解

  • 第一个数N:表示一共N种服务器
    • 接下来N行为所有的服务器
    • 说明:(型号,CPU核数、内存大小、硬件成本,每日能耗成本)
    • 存储格式:型号:CPU核数、内存大小、硬件成本,每日能耗成本
  • 第二个数M:表示M种虚拟机
    • 接下来M行为所有的虚拟机
    • 说明:(型号、CPU核数、内存大小、是否双节点部署)
    • 存储格式:型号:[CPU核数、内存大小、是否双节点部署]
    • 注:0为单节点、1为双节点
  • 第三个数T:表示一共有T天
    • 接下来T*a行表示T天的请求
  • 第四个数S:表示该天有S个请求
    • 接下来S行为每天的请求
    • 说明:
      • (add,虚拟机型号,虚拟机ID)
      • (del,虚拟机ID)

输出详解

  • 总共T*a行
    • 没以块a表示改天的购买、迁移与添加操作
  • a块详解
    • 第一个数:(purchase, Q)
      • Q为当天新购买Q太服务器
      • 接下来Q行表示购买的服务器类型与个数
      • 例:(NV603, 2),表示购买2台NV603型号服务器
        • 此时,第一台NV603id为0
        • 第二台id为1
        • 如果有新的服务器购买,则id为3(不管是不是这个类型)
    • 第二个数:(migration, W)
      • W为当天迁移的虚拟机数量:W必须小于当前虚拟机总数的5*n/1000
      • 接下来W行,每一行表示一个虚拟机的迁移
      • 例1:(虚拟机ID,目的服务器ID)
        • (3, 1)表示将 ID 为 3 的虚拟机从当前所在服务器迁移至 ID 为 1 的服务器,该虚拟机必须是双节点部署的
      • 例2:(虚拟机ID,目的服务器ID,目的服务器节点)
        • (4, 1, A)表示将 ID 为 4 的虚拟机从当前所在服务器迁移至 ID 为 1 的服务器的 A 节点,该虚拟机必须是单节点部署的。
    • 接下来,只需要更具输入来合理的配置该虚拟机所在的服务器即可
      • 格式为(服务器ID)或者(服务器ID,部署节点)
      • 如果是双节点,则直接输出服务器id
      • 如果是单节点,则需要说出节点(A或B)

三、易错点提前解析

1.Q的值

在每天的购买服务器之后,我们就需要输出当天购买服务器的类型和每台服务器的台数,因此每天输出的第一行就是(purchase, Q),而这个Q就是我们当天购买服务器的总类型数量。

2. 服务器id问题

在每一天,你需要提前说明需要购买的服务器种类,然后在购买完以后再(purchase, Q)下一次输出每种服务器的个数。也就在这时,在后台和你自己这里就需要知道,从第一个服务器输出开始,就表示它的服务器id了,

比如说:你在第一天。第一次购买了A服务器(该服务器的id为0),然后又购买了新的B服务器(该服务器的id为1),但是还是不够,你就又重新购买了新的服务器A。但是这个时候A的id应该是啥?是继续B后面的id还是A后面的id。按照大赛的规则:对于第i天,如果已经购买了服务器A和B,但再次基础上又想添加一台A,那么在这台A服务器的id必须紧跟在之前购买A的服务器id后。也就是说,如果以前的A为0,B为1。如果又重新买了A服务器,则这台服务器的id必须为1,以前买的服务器id就得变成2。

那如何解决这个问题呢?下面是我的解决思路:

  • 先获取这一天每天的增加服务器命令
  • 然后依次执行该命令。如果当前服务器够使用,那就直接减去即可。但如果当前服务器不够,那就得重新购买新的服务器。
  • 对于服务器id,我们就给与新的服务器id一个伪id(大赛规定佛购买服务器的总量不能超过10w,那我们的服务器id就从10w开始,给每个服务器一段5000的间隔(这个意思是假设这一天购买的服务器规定最多5000台,当然可以增加也可以减少))。我们将虚拟机的配置信息和伪id与挂载节点一起存起来。
  • 当一天结束以后,你就可以获得当天的总购买服务器id表,这里存放着当天所购买的所有服务器总类和个数。之后我们更具存放的顺序,依次用新的服务器id替换伪id。

3. 迁移问题

我想大家在写题目的时候,遇到最多的问题就是服务器资源超出限制。但是你明明已经在迁移的时候设置好了各种限定条件,但是为什么还会出现迁移资源超出限制呢?

这是对于判题器来说,他是先进行购买服务器然后再进行迁移最后执行添加和删除操作的。而我自己(可能大多数人和我一样)是先进行执行添加操作(如果服务器不够则购买),然后进行删除最后迁移。但是这样就出现了一个问题,对于你提前删除虚拟机的服务器,在你的后台资源是增加了,但是对于判题器来说它并没有任何服务器的资源增加。这也就导致了你自己的输出是没有任何问题的,但一提交就会出现资源超出的问题。

四、思路分析

下图是最开始我们的解题思路

Created with Raphaël 2.2.0 依行接收每一天的虚拟机请求 改指令是否是添加操作? 获取剩余资源总 服务器资源是否足够? 执行合理配置虚拟算法 是否需要迁移虚拟机? 执行迁移虚拟机算法 汇总剩余资源总量 进入下一天 执行买进服务器算法 删除虚拟机算法 yes no yes no yes no

但是,由于迁移问题,我们需要先执行迁移,然后再进行虚拟机的添加和删除操作。也就是下面的流程

Created with Raphaël 2.2.0 依行接收每一天的虚拟机请求 是否需要迁移虚拟机? 执行迁移虚拟机算法 改指令是否是添加操作? 获取剩余资源总 服务器资源是否足够? 执行合理配置虚拟算法 汇总剩余资源总量 进入下一天 执行买进服务器算法 删除虚拟机算法 yes no yes no
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值