想了很久一点思路都没有,感谢黄学长:http://hzwer.com/2656.html
很巧妙的证明,尤其是后面的坐标求解
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define maxn 1000020
#define LL long long
using namespace std;
int n;
int c[maxn],a[maxn],ave;
LL ans,sum;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",a+i);
sum+=a[i];
}
ave=sum/n;
for(int i=1;i<=n;i++){
c[i]=a[i]-ave+c[i-1];
}
sort(c+1,c+1+n);
int mid=c[(n>>1)+1];
for(int i=1;i<=n;i++){
ans+=abs(c[i]-mid);
}
printf("%lld",ans);
return 0;
}