CodeForces 609C Load Balancing
2016-07-18 08:44
204 查看
A - Load Balancing
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d
& %I64u
Submit Status Practice CodeForces
609C
Appoint description:
System Crawler (Jul 11, 2016 1:45:17 PM)
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
Input
Output
Input
Output
Input
Output
Hint
In the first example two seconds are needed. In each second, a single task from server #2 should be moved to server #1. After two seconds there should be 3 tasks on server #1 and 4 tasks on server #2.
In the second example the load is already balanced.
A possible sequence of task movements for the third example is:
move a task from server #4 to server #1 (the sequence m becomes: 2 2 3 3 5);
then move task from server #5 to server #1 (the sequence m becomes: 3 2 3 3 4);
then move task from server #5 to server #2 (the sequence m becomes: 3 3 3 3 3).
The above sequence is one of several possible ways to balance the load of servers in three seconds.
题意比较好理解
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,i,j,k,l,avg1,avg2,a[110000];
int main()
{
while(scanf("%d",&n)!=EOF)
{
int sum=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
avg1=avg2=sum/n;
if(sum%n)
avg2++;
int num1=0;
int num2=0;
for(i=0;i<n;i++)
{
if(a[i]<avg1)
{
num1+=(avg1-a[i]);
}
else if(a[i]>avg2)
{
num2+=(a[i]-avg2);
}
}
int num=max(num1,num2);
printf("%d\n",num);
}
return 0;
}
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d
& %I64u
Submit Status Practice CodeForces
609C
Appoint description:
System Crawler (Jul 11, 2016 1:45:17 PM)
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
Input
2 1 6
Output
2
Input
7 10 11 10 11 10 11 11
Output
0
Input
5 1 2 3 4 5
Output
3
Hint
In the first example two seconds are needed. In each second, a single task from server #2 should be moved to server #1. After two seconds there should be 3 tasks on server #1 and 4 tasks on server #2.
In the second example the load is already balanced.
A possible sequence of task movements for the third example is:
move a task from server #4 to server #1 (the sequence m becomes: 2 2 3 3 5);
then move task from server #5 to server #1 (the sequence m becomes: 3 2 3 3 4);
then move task from server #5 to server #2 (the sequence m becomes: 3 3 3 3 3).
The above sequence is one of several possible ways to balance the load of servers in three seconds.
题意比较好理解
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,i,j,k,l,avg1,avg2,a[110000];
int main()
{
while(scanf("%d",&n)!=EOF)
{
int sum=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
avg1=avg2=sum/n;
if(sum%n)
avg2++;
int num1=0;
int num2=0;
for(i=0;i<n;i++)
{
if(a[i]<avg1)
{
num1+=(avg1-a[i]);
}
else if(a[i]>avg2)
{
num2+=(a[i]-avg2);
}
}
int num=max(num1,num2);
printf("%d\n",num);
}
return 0;
}
相关文章推荐
- CocosCreator
- JavaScript获取css行间样式,内连样式和外链样式的简单方法
- SDUT 2133 数据结构实验之栈三:后缀式求值
- 杭电ACM--HDU-1021斐波拉契
- python学习——TCP编程
- JZOJ1444. 交换【推荐】
- 接口总结
- Android通知栏
- 关于eclipsetomcat部署项目路径修改
- FIREDAC驱动ORACLE的配置
- Bootstrap零基础学习第一课之模板
- java中特殊的流程控制语句(break,continue,return)
- Constraint 约束增强说明
- 关于分块算法and莫队算法
- HDU - 4730 We Love MOE Girls
- [leetcode] 342. Power of Four
- 如何合理定价,定价定天下,必须要学会这个哦!
- jQuery学习<五> — — 选择器(下)
- 杭电ACM 1048
- 错误票据