#P1485. 2024.9.11-秋招(留学生)-第1题-小塔的机房

2024.9.11-秋招(留学生)-第1题-小塔的机房

题目内容

机房运行了KK个计算节点,每个节点当前负载数为TT,每个节点的CPUCPU核心数为CC,一个CPUCPU核心的最大负载数为200200,节点总负载数=节点CPUCPU核心数200*200,节点的CPUCPU负载-节点当前负载数/节点总负载数。节点宕机在机房是经常发生的事,因此要设计一种算法将宕机节点的负载均衡地迁移到负载低的节点,使各节点的CPUCPU负载保持一致,给定右机节点的负载数NN,求每个计算节点应该新增的负载数。 备注:11.如果宕机节点的负载数超出了所有节点总负载数,不进行重新调度,则每个节点新增的任务数为00

2.如果宕机节点的负载数没有超出所有节点总负载数,输入能够保证最终分配完全均衡,即分配后各个计算节点的CPUCPU负载保持相等,精度不低于0.0010.001

输入描述

宕机节点的负载数NN[1,10000001,1000000]

计算节点的台数KK[1,5001,500]

每个节点的核心数CC[1,10001,1000]

每个节点当前的负载数TT[1,100001,10000]

输出描述

每个节点应该新增的负载数。

样例1

输入

 1180
 3
 45 28 45
 6750 4200 6750

输出

450 280 450

说明

宕机节点上有11801180个负载待迁移,计算节点有33个,CPUCPU核心数分别为45284545、28、45,当前负载分别为6750420067506750、4200、6750

三个节点分别迁移450280450450、280、450个负载后,节点的CPUCPU负载分别为(450+6750)/(45×200)=0.8(450+6750)/(45×200)=0.8(280+4200)/(28×200)=0.8(280+4200)/(28×200)=0.8(450+6750)/(45×200)=0.8(450+6750)/(45×200)=0.8,所以返回了450 280 450450\ 280\ 450

样例2

输入

500
3
2 2 2
200 300 400

输出

0 0 0

说明

宕机节点上有500500个负载待迁移,计算节点有33个,每个节点有22个核心各个节点分别有200200个,300300个、400400个负载。第11个计算节点还能增加200200个负载,第22个计算节点还能增加100100个负载,第33个计算节点无法增加负载,33个计算总共能增加的负载为300300,小于500500,因此不进行重新调度,返回0 0 00\ 0\ 0