思路:大白原题,看书上的解释得很好
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
#include <set>
#include <ctime>
#include <cmath>
#include <cctype>
using namespace std;
#define maxn 1000000+10
#define LL long long
LL A[maxn],C[maxn],tot,M;
int cas=1,T;
int main()
{
int n;
while (scanf("%d",&n)!=EOF)
{
tot=0;
for (int i = 1;i<=n;i++)
{
scanf("%lld",&A[i]);
tot+=A[i];
}
M=tot/n;
C[0]=0;
for (int i = 1;i<n;i++)
C[i]=C[i-1]+A[i]-M;
sort(C,C+n);
LL x1 = C[n/2],ans=0;
for (int i = 0;i<n;i++)
ans+=abs(x1-C[i]);
printf("%lld\n",ans);
}
//freopen("in","r",stdin);
//scanf("%d",&T);
//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
return 0;
}