3707 - police

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

城里很乱,小学生很怕,小学生要求由小学生组成的警察局招募新成员以便防止出没的小学生小偷。
给出一列数字,a1...an  如果ai>0,则表示刚刚招募了ai个警察,如果ai<0,则表示有ai个小偷出现准备逃跑,由于警察局警力
严重不足,所以除了新招募的以外没有任何警员。比如一串数  -1 -1 1 -1 a1=-1:出现了一个小偷,但是没有警察去抓他,所以这个
小偷跑了, a2=-1 跟a1一样。这个小偷跑了, a3=1.这个新招募进来的大兄弟暂时没有任何作用. a4=-1,刚好招募了一个新警察(a3),这个小偷跑不了了。
你的任务是求出有几个小偷能跑掉。
1<=n<=10^6.

题目输入

第一行输入n.
第二行输入ai.

题目输出

Print a single integer, the number of crimes which will go untreated.

输入/输出样例

输入格式

4
-1 -1 1 -1
11
-1 -1 2 -1 -1 -1 -1 -1 -1 -1 -1

输出格式

2
8

C语言解答

#include<stdio.h>
int main()
{
	int i,n,t,sum,k;
	while(scanf("%d",&t)==1)
	{
		sum=0;k=0;
		for(i=1;i<=t;i++)
		{
			scanf("%d",&n);
			sum+=n;
			if(sum<0){k+=sum;sum=0;}
		}
		printf("%d\n",-k);
	}
	return 0;
}

C++解答

#include <stdio.h>
using namespace std;  
int main()  
{  
    int n,a;  
    
    int sum=0,ans=0;  
    while(scanf("%d",&n)!=EOF)
    {
    	sum=ans=0;
    for(int i=1;i<=n;i++)  
    {  
        scanf("%d",&a);  
        if(a==-1)  
        {  
            if(sum==0)  
                ans++;  
            else  
                sum--;  
        }  
        else  
            sum+=a;  
    }  
    printf("%d\n",ans);  
  
}
return 0;
}