题目大意:直线上有n个等距的村庄,每个村庄要么买酒,要么卖酒。第i个村庄对酒的需求是ai,ai>0表示买酒,ai<0表示卖酒。ai的和为0.把k个单位的酒从一个村庄运到相邻的村庄需要k个单位的劳动力。计算最少需要多少劳动力可以满足所有村庄的需求。
方法:从左往右扫到n-1,每到一个村庄,最后的结果ans+=|ai|,不管ai的值是多少,ai+1+=ai,表示它还需要ai大小的酒运到村庄i或者从村庄i收到ai的酒;
AC代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<time.h>
using namespace std;
long long s[100005];
int main()
{
long long n,i,ans;
while(cin>>n)
{
if(n==0)
{
break;
}
for(i=0;i<n;i++)
{
cin>>s[i];
}
ans=0;
for(i=0;i<n-1;i++)
{
if(s[i]>0)
{
ans+=s[i];
s[i+1]+=s[i];
}
else
{
ans-=s[i];
s[i+1]+=s[i];
}
}
cout<<ans<<endl;
}
return 0;
}