贪心,找中位数,白书原题。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define maxn 2000000
long long c[maxn];
long long a[maxn],n,m;
int main()
{
int x;
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
m+=a[i];
}
m=m/n;
c[0]=0;
for(int i=1;i<n;i++)
{
c[i]=c[i-1]+a[i]-m;
}
sort(c,c+n);
long long ans=0;
long long k=c[n/2];
for(int i=0;i<n;i++)
{
ans+=abs(k-c[i]);
}
printf("%lld",ans);
return 0;
}