【题目描述】
有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。
【输入】
第一行一个正整数n≤1000000,表示小朋友的个数.
接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数.
【输出】
求使所有人获得均等糖果的最小代价。
【输入样例】
4
1
2
5
4
【输出样例】
4
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+5;
ll n,a[N],s[N],sum=0;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
for(int i=1;i<=n;i++)
cin >> a[i],sum+=a[i];
ll av=sum/n;
for(int i=1;i<=n;i++)
s[i]=s[i-1]+a[i]-av;
sort(s+1,s+n+1);
ll res=0,x=s[(1+n)>>1];
for(int i=1;i<=n;i++)
res+=abs(s[i]-x);//与中位数的差值之和
cout << res << endl;
return 0;
}