注意:
1、c[i]=c[i-1]+A[i]-M,书中的“下面类似”没有说清楚,其实c[1]=c[0]+A[1]-M。
2、注意不存在c[n]。
代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <cstring>
#include <map>
using namespace std;
#define maxn 1000000
#define ll long long
int n;
ll a[maxn+5]={0};
ll c[maxn+5]={0};
int main() {
while(~scanf("%d",&n)) {
ll m=0;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
m+=a[i];
}
m/=n;
c[0]=0;
for(int i=1;i<n;i++){
c[i]=a[i]-m+c[i-1];
}
sort(c,c+n);
ll x1=c[(n+1)/2];
ll ans=0;
for(int i=0;i<n;i++){
ans+=abs(c[i]-x1);
}
printf("%lld\n",ans);
}
return 0;
}