bzoj1045
bzoj3293
题解

Solution
又是双倍经验题
推导如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000001;
ll tot,ans;
int n,i,a[N],c[N],mid;
inline char gc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read(){
    int x=0,fl=1;char ch=gc();
    for (;ch<48||ch>57;ch=gc())if(ch=='-')fl=-1;
    for (;48<=ch&&ch<=57;ch=gc())x=(x<<3)+(x<<1)+(ch^48);
    return x*fl;
}
int main(){
	n=read();
	for (i=1;i<=n;i++) a[i]=read(),tot+=a[i];
	tot/=n;
	for (i=2;i<=n;i++) c[i]=c[i-1]+a[i-1]-tot;
	mid=n+1>>1;
	nth_element(c+1,c+mid,c+n+1);
	tot=c[mid];
	for (i=1;i<mid;i++) ans+=tot-c[i];
	for (i=mid+1;i<=n;i++) ans+=c[i]-tot;
	printf("%lld",ans);
}