#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1e6+5;
ll a[N],S[N];
int main(){
int n;scanf("%d",&n);ll av=0;
for(int i=1;i<=n;++i) scanf("%lld",&a[i]),av+=a[i];
av/=n;//平均数
for(int i=1;i<=n;++i) S[i]=S[i-1]+a[i]-av;
sort(S+1,S+n+1);
ll X=-S[(n+1)/2],ans=0;//X[n]应等于-S[中位数]. 对于所有的X[i]的和才取得最小值
for(int i=1;i<=n;++i) ans+=abs(X+S[i]);//X[i]. 第i位给第i+1位的糖果,消耗这么多价值.
printf("%lld\n",ans);
}
bzoj1045(糖果传递 数学 中位数最优)
最新推荐文章于 2023-07-03 19:47:58 发布