首先每个人一定分到的糖果都是所有糖果的平均数ave。
设第i个人给i-1个人Xi个糖果,则有Ai-Xi+X(i+1)=ave。
则A1-X1+X2=ave,A2-X2+X3=ave,A3-X3+X4=ave。
X2=ave+X1-A1,A2-ave-X1+A1+X3=ave
X3=2ave+X1-A1-A2
设Bi=sigma(A(1~i-1))-(i-1)*ave
则答案为|Bi-X1|的和的最小值,求个中位数即可
#include<bits/stdc++.h> #define ll long long using namespace std; const int maxn=1000010; int n,a[maxn]; ll sum,ave,b[maxn],mid,now,ans; void read(int &k) { int f=1;k=0;char c=getchar(); while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar(); while(c<='9'&&c>='0')k=k*10+c-'0',c=getchar(); k*=f; } int main() { read(n); for(int i=1;i<=n;i++)read(a[i]),sum+=a[i]; ave=sum/n; for(int i=2;i<=n;i++)b[i]=b[i-1]+a[i]-ave; sort(b+1,b+1+n); mid=b[(n+1)>>1]; for(int i=1;i<=n;i++) ans+=abs(b[i]-mid); printf("%lld\n",ans); }