比赛 20091026 评测结果 WAWTWTWTTA
题目名称 货物搬运 最终得分 20
用户昵称 song 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-10-26 21:53:49
显示代码纯文本
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("move.in");
ofstream fout("move.out");
int n,zp[11000]={0},q,answer=0,na=0;
int min();
void yi(int x,int y);
int main()
{
	fin>>n;
	zp[0]=0;
	for(int i=1;i<=n;i++)
	{
		fin>>zp[i];
		zp[0]=zp[0]+zp[i];
	}
	q=zp[0]/n;
	for(int i=1;i<=n;i++)
	{
		zp[i]=zp[i]-q;
		if(zp[i]==0)
		{
			na++;
		}
	}
	while(na<n)
	{
	    min();
		int p=min();
		if(p-1!=0)
		{
	        if(zp[p-1]>zp[p+1]&&zp[p+1]<=0)
		        {yi(p,p+1);}
	        else
	        {
		        if(zp[p-1]<zp[p+1]&&zp[p-1]<=0)
		        {yi(p,p-1);}
	        }
	    }
		if(p-1==0)
		{
			if(zp[n]>zp[p+1]&&zp[p+1]<=0)
		        {yi(p,p+1);}
	        else
	        {
		        if(zp[n]<zp[p+1]&&zp[n]<=0)
		        {yi(p,n);}
	        }
		}
	}
	fout<<answer;
	return 0;
}
int min()
{
	int min=zp[1],p=1;
	for(int i=2;i<=n;i++)
	{
		if(zp[i]>0&&zp[i]<min)
		{
			min=zp[i];
			p=i;
		}
	}
	return p;
}
void yi(int x,int y)
{
	int z;
	z=zp[x]+zp[y];
	if(z<0)
	{
		answer=answer+zp[x];
		zp[y]=z;
		zp[x]=0;
		na++;
	}
	else
	{
		if(z==0)
		{
			answer=answer+zp[x];
		    zp[y]=z;
		    zp[x]=0;
		    na=na+2;
		}
		else
	    {
		    answer=answer-zp[y];
		    zp[x]=z;
		    zp[y]=0;
		    na++;
	    }
	}
}