为了平衡每台服务器的负载,你想重新分配一些任务,使负载最大的服务器和负载最小的服务器之间的差异尽可能小。换句话说,你想使表达式ma - mb最小化,其中a是负载最大的服务器,b是负载最小的。
在一秒钟内,你可以重新分配一个任务。因此,在一秒钟内,你可以选择任何一对服务器,将一个任务从一个服务器转移到另一个服务器。
写一个程序,找出平衡服务器负载所需的最小秒数。
2 1 6
2
7 10 11 10 11 10 11 11
0
5 1 2 3 4 5
3
第一行包含正数n(1≤n≤105)--服务器的数量。
第二行包含非负整数m1,m2,...,mn 的序列(0≤mi≤2·104),其中mi 是分配给第i台服务器的任务数。
打印平衡负载所需的最小秒数。
2
1 6
2
在第一个例子中,需要两秒钟。在每一秒内,服务器#2中的一个任务应该移动到服务器#1。两秒钟后,服务器#1上应该有3个任务,服务器#2上应该有4个任务。
在第二个例子中,负载已经平衡了。
对于第三个例子,可能的任务移动顺序是:
将一个任务从服务器#4移动到服务器#1(序列m变成:2 2 3 3 5);
然后将任务从服务器#5移动到服务器#1(序列m变为:3 2 3 3 3 4);
然后将任务从服务器#5移动到服务器#2(顺序m变为:3 3 3 3 3 3 3)。
上述顺序是在三秒内平衡服务器负载的几种可能方法之一