Description
有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。
Input
第一行一个正整数n<=987654321,表示小朋友的个数.接下来n行,每行一个整数ai,表示第i个小朋友得到的
糖果的颗数.
Output
求使所有人获得均等糖果的最小代价。
Sample Input
4
1
2
5
4
1
2
5
4
Sample Output
4
HINT
题目范围其实是n<=1000000……ai<=1e9……
竟然没想出来……还是挺厉害的……
对了注意一下long long
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int
N=1000005;
int n;
ll a[N],S[N];
int main(){
cin>>n;ll ave=0LL;
for (int i=1;i<=n;i++)
scanf("%lld",&a[i]),ave+=a[i];
ave/=(ll)n,S[0]=0LL;
for (int i=1;i<=n;i++) S[i]=S[i-1]+a[i]-ave;
sort(S+1,S+1+n);
ll ans=0LL,t=S[n>>1];
for (int i=1;i<=n;i++) ans+=abs(S[i]-t);
cout<<ans<<endl;
return 0;
}