博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Educational Codeforces Round 3 C. Load Balancing 贪心
阅读量:5032 次
发布时间:2019-06-12

本文共 1878 字,大约阅读时间需要 6 分钟。

C. Load Balancing

题目连接:

Description

In the school computer room there are n servers which are responsible for processing several computing tasks. You know the number of scheduled tasks for each server: there are mi tasks assigned to the i-th server.

In order to balance the load for each server, you want to reassign some tasks to make the difference between the most loaded server and the least loaded server as small as possible. In other words you want to minimize expression ma - mb, where a is the most loaded server and b is the least loaded one.

In one second you can reassign a single task. Thus in one second you can choose any pair of servers and move a single task from one server to another.

Write a program to find the minimum number of seconds needed to balance the load of servers.

Input

The first line contains positive number n (1 ≤ n ≤ 105) — the number of the servers.

The second line contains the sequence of non-negative integers m1, m2, ..., mn (0 ≤ mi ≤ 2·104), where mi is the number of tasks assigned to the i-th server.

Output

Print the minimum number of seconds required to balance the load.

Sample Input

2

1 6

Sample Output

2

Hint

题意

有n个机器,每个机器的任务时间是a[i],你的任务是在最少的操作,使得所有Maxa[i]-Mina[i]最小。每次操作是可以使得某一个a[i]-1,某一个a[i]+1。

题解:

很显然,最后结果一定都在平均值位置,我们也可以比较轻松得到,最后究竟是多少个数为平均值,多少个数为平均值+1。所以我们直接贪心就好了。

小于平均值的就直接拉上去,大于平均值的就减下去就好了。

代码

#include
using namespace std;int a[100005];int main(){ int n;scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+1+n); long long sum = 0; for(int i=1;i<=n;i++) sum+=a[i]; int p = sum / n; int n1 = n - sum%n; int ans = 0; for(int i=1;i<=n1;i++) { if(p<=a[i])break; ans+=p-a[i]; } for(int i=n1+1;i<=n;i++) { if(a[i]>p)break; ans+=p+1-a[i]; } printf("%d\n",ans);}

转载于:https://www.cnblogs.com/qscqesze/p/5060201.html

你可能感兴趣的文章
icon fonts入门
查看>>
【Django】如何按天 小时等查询统计?
查看>>
测试用例(一)
查看>>
邮件中的样式问题
查看>>
AJAX 状态值与状态码详解
查看>>
php面向对象编程(oop)基础知识示例解释
查看>>
关于根据Build Platform或者OS 加载x86或者x64 dll的问题
查看>>
程序员高效开发的几个技巧
查看>>
hexo 搭建博客
查看>>
建造者模式(屌丝专用)
查看>>
Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
查看>>
【转】常用的latex宏包
查看>>
酷狗的皮肤文件存放在哪
查看>>
C++的引用
查看>>
T-SQL查询进阶--深入浅出视图
查看>>
Android读取url图片保存及文件读取
查看>>
完整ASP.Net Excel导入
查看>>
判断CPU大小端示例代码
查看>>
循环队列的运用---求K阶斐波那契序列
查看>>
关于git的认证方式
查看>>