sicily 2013. Pay Back

#include<iostream>
using namespace std;
int n,d[100010];
int main()
{
cin
>>n;
for(int i=1;i<=n;++i)
cin
>>d[i];
int step=n,s=0,pre=-1; //pre=-1表示当前可以偿还债务
for(int i=1;i<=n;++i)
{
s
+=d[i];
if(s<0&&pre==-1) //无法偿还债务时(s<0)应记录下是在哪个点开始无法偿还
pre=i;
else if(s>=0&&pre!=-1) //只要可以偿还债务(s>=0)就应该立刻返回到开始无法偿还的那个点,尽量使往回走的距离最短
{
step
+=2*(i-pre);
pre
=-1;
}
}
cout
<<step<<endl;
return 0;
}

posted on 2011-07-07 13:12  sysu_mjc  阅读(187)  评论(0编辑  收藏  举报

导航