不放题面了,三道都差不多是裸题,CQOI和HAOI是真正的双倍经验,好像可以直接交。
有一些数学的成分,考虑分到中位数是一定最优的。至于证明请找suika,我不会
// luogu-judger-enable-o2
#include <cstdio>
#include <algorithm>
#include <cctype>
using namespace std;
const int N = 1100000;
long long a[N],n;
long long s[N];
inline char nc() {
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline long long read() {
long long x=0,f=1;char ch=nc();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=nc();}
while(isdigit(ch)){x=((x+(x<<2))<<1)+(ch^'0');ch=nc();}
return x*f;
}
int abs(int x){return x>0?x:-x;}
int main() {
n=read();
long long sum=0;
for(int i=1;i<=n;i++)a[i]=read(),sum+=a[i];
sum/=n;
for(int i=1;i<=n;i++)
s[i]=s[i-1]+a[i]-sum;
sort(s+1,s+n+1);
int m = s[n+1>>1];
long long ans=0;
for(int i=1;i<=n;i++)
ans+=abs(s[i]-m);
printf("%lld\n",ans);
}