首先每个人一定分到的糖果都是所有糖果的平均数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=;
int n,a[maxn];
ll sum,ave,b[maxn],mid,now,ans;
void read(int &k)
{
int f=;k=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
int main()
{
read(n);
for(int i=;i<=n;i++)read(a[i]),sum+=a[i];
ave=sum/n;
for(int i=;i<=n;i++)b[i]=b[i-]+a[i]-ave;
sort(b+,b++n);
mid=b[(n+)>>];
for(int i=;i<=n;i++)
ans+=abs(b[i]-mid);
printf("%lld\n",ans);
}
05-11 18:30