CodeForces 609 C. 로드 밸런싱(물~)

2359 단어
Description에는 n개의 서버가 있습니다. 각 서버는ai개의 작업을 처리해야 합니다. 1초에 한 서버의 작업을 다른 서버로 옮겨서 실행할 수 있습니다. 현재 각 서버가 작업의 최대치와 최소치의 차이를 최소화해야 합니다. 최소 몇 초 동안 작업을 옮겨야 하는지 묻습니다.이후 n개의 정수ai는 각 서버가 수행해야 할 작업 수(1<=n<=10^5,0<=m<=2*10^4)Output 출력에 최소 몇 초의 작업이 있어야 서버가 작업 수를 처리하는 최소의 차이를 나타냅니다. Sample Input 2 1 6 Sample Output 2 Solution 문제입니다. 임무 수량을sum로 설정하면sum%n대의 서버가sum/n+1개의 작업을 처리하고 n-sum%n대의 서버가sum/n개의 작업을 처리하는 것이 가장 좋은 방안입니다.그렇다면ai를 순서대로 배열한 후에ai와 최우선 답안의 차치를 누적하여 그 결과를 2로 나누면 답안코드
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 111111
typedef long long ll;
int n,a[maxn];
int main()
{
    while(~scanf("%d",&n))
    {
        int ave=0,res,ans=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            ave+=a[i]; 
        }
        sort(a,a+n);
        res=ave%n,ave/=n;
        for(int i=n-1;i>=0;i--)
            if(res)ans+=abs(a[i]-ave-1),res--;
            else ans+=abs(a[i]-ave);
        printf("%d
"
,ans/2); } return 0; }

좋은 웹페이지 즐겨찾기