/*
uva 11300
Author: lcy
Time:2017-11-1
白书第一章例题,讲的很明白。

题意:多个人站在一个环上,初始时刻每个人都有一定数量的硬币
保证所有硬币都能被均分,每个人可以把手中任意数量的硬币
的硬币给左右两人,求所有人最少给硬币多少次

任选一个人,如果知道他最终向左边给出了多少硬币,那么
我们可以知道所有人向左右给出硬币的数量。
可以以此列出单变量等式,并求其最小值。
*/
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fr(i,a,b) for(int i=a;i<=b;i++)
#define frr(i,a,b) for(int i=a;i>=b;i--)
#define ms(a,b) memset(a,b,sizeof(a))
#define scfd(a) scanf("%d",a)
#define scflf(a) scanf("%lf",a)
#define scfs(a) scanf("%s",a)
#define ptfd(a) printf("%d\n",a)
#define ptfs(a) printf("%s\n",a)
#define showd(a,b) printf(a"=%d\n",b)
#define showlf(a,b) printf(a"=%lf\n",b)
#define shows(a,b) printf(a"=%s\n",b)
#define mmcp(a,b) memcpy(a,b,sizeof(b))
#define pb(a) push_back(a)
const int MAXN=1000005;
ll c[MAXN],t[MAXN];
ll sum=0,ave;
int n;
int main(){
	while(~scfd(&n)){
		sum=0;
		fr(i,1,n)scanf("%lld",&t[i]),sum+=t[i];
		ave=sum/(ll)n;
		fr(i,1,n)c[i]=c[i-1]+t[i]-ave;
		sort(c+1,c+1+n);
		ll tt=c[1+n/2],ans=0;
		fr(i,1,n)ans+=abs(c[i]-tt);
		printf("%lld\n",ans);
	}
	return 0;
}

 posted on 2017-11-01 12:49  cylcy  阅读(87)  评论(0编辑  收藏  举报