[BZOJ1045] [HAOI2008] 糖果传递 (中位数)
Description
Solution
这题跟数列的中位数有关,
具体证明见刘汝佳的蓝皮书里
Code
#include <cstdio>
#include <algorithm>
#include <cmath>
#define N 1000010
#define ll long long
using namespace std;
int n;
ll sum,av,Ans,A[N],c[N];
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int main(){
n=read();for(int i=1;i<=n;sum+=(A[i++]=read()));
av=sum/n;
for(int i=1;i<n;++i) c[i]=c[i-1]+A[i]-av;
sort(c,c+n);
ll x1=c[n>>1];
for(int i=0;i<n;++i) Ans+=fabs(x1-c[i]);
printf("%lld\n",Ans);
return 0;
}