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);
}