比赛 20091026 评测结果 C
题目名称 货物搬运 最终得分 0
用户昵称 Cloud 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-10-26 20:21:30
显示代码纯文本
#include<cstdio>
#include<fstream>
using namespace std;
int main(void)
{
	freopen("move.in","r",stdin);
	freopen("move.out","w",stdout);
	int n,y[10000],p;
	int a;
	int mid=0;
	scanf("%d",&n);
	a=n;
	for(p=0;p<n;p++)
	{
		scanf("%d",&y[p]);
		mid+=y[p];
	}
	mid/=n;
	int m=0;
	for(p=0;p<n;p++)
		y[p]-=mid;
	while(n)
	{
		int min=9999999;
		int q;
		for(q=0;q<a;q++)
			if(abs(min)>abs(y[q])&&y[q]!=0)
			{
				p=q;
				min=y[q];
			}
		int j,k;
		if(p==0)j=a-1;
		else j=p-1;
		if(p==a-1)k=0;
		else k=p+1;
		if(abs(y[j]+y[p])>abs(y[k]+y[p]))
			q=k;
		else q=j;
		if(y[q]==0)
		{
			if(q==j)q=k;
			else q=j;
		}
		if(abs(y[p])>abs(y[q]))
		{
			m+=abs(y[q]);
			y[p]+=y[q];
			y[q]=0;
		}
		else 
		{
			m+=abs(y[p]);
			y[q]+=y[p];
			y[p]=0;
		}
		n--;
	}
	printf("%d",m);
	return 0;
}