<center style="color&#58;rgba&#40;0&#44;0&#44;0&#44;&#46;87&#41;&#59;font&#45;family&#58;Lato&#44; &#39;Helvetica Neue&#39;&#44; Arial&#44; Helvetica&#44; sans&#45;serif&#59;font&#45;size&#58;14px&#59;">

问题 : #6013. 「网络流 24 题」负载平衡

时间限制: 1 Sec   内存限制: 256 MB
</center>

题目描述

G 公司有 n nn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等。如何用最少搬运量可以使 n nn 个仓库的库存数量相同。搬运货物时,只能在相邻的仓库之间搬运。

输入

文件的第 1 11 行中有 1 11 个正整数 n nn,表示有 n nn 个仓库。
第 2 22 行中有 n nn 个正整数,表示 n nn 个仓库的库存量。

输出

输出最少搬运量。

样例输入

5
17 9 14 16 4

样例输出

11

提示

1≤n≤100

#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
    int n, m, min, s[10100], a[10100];
    long long sum;
    while(~scanf("%d", &n))
    {
        min = 0;
        sum = 0;
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &s[i]);
            sum += s[i];
        }
        m = sum / n;
        a[0] = 0;
        for (int i = 1; i < n; i++)
            a[i] = a[i - 1] + s[i] - m;
        sort(a, a + n);
        for (int i = 0, j = n - 1; i < j; i++, j--)
            min += a[j] - a[i];
        printf("%d\n", min);
    }
    return 0;
}