比赛 |
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++;
}
}
}