问题 : DOBRI

问题 : DOBRI

时间限制: 1 Sec  内存限制: 128 MB
提交: 8  解决: 6
[提交][状态]

题目描述

给出一个包含N个整数的序列A,定义这个序列A的前缀和数组为SUM数组 ,当SUM数组中的第i个元素等于在i前面的三个元素的和,那么第i个元素就称为GOOD。 那么这个SUM数组中包含多少个GOOD 元素?

输入

第一行整数T表示数据组数(1<=T<=10)

每组数据以下格式:

输入的第一行包含一个整数N (1<=N<=100000), 表示序列A的长度。

输入的第二行包含N个用空格隔开的整数,表示序列A (-100000<=Ai<=100000).

输出

每组数据输出仅一行,输出这个SUM数组中包含多少个GOOD元素。

样例输入

341 1 1 341 2 3 1065 -2 -3 1 3 3

样例输出

101

提示

算Sn的时候注意超时

#include<stdio.h>
int a[100010],s[100010];
int main()
{
	int t,n,i,j,sum,ans;
	while(scanf("%d",&t)!=EOF)
	{
		while(t--)
		{
			scanf("%d",&n);
			if(n<=3)
			{
				printf("0\n");
				continue;
			}
			
			for(i=0;i<n;i++)
			{
				scanf("%d",&a[i]);
				if(i==0)
					s[i]=a[i];
				else
					s[i]=s[i-1]+a[i];
			}
				
			sum=s[0]+s[1]+s[2];
			ans=0;
			for(i=3;i<n;i++)
			{
				if(s[i]==sum)
					ans++;
				sum=sum+s[i]-s[i-3];
			}
			printf("%d\n",ans);	
		}
	}
	return 0;
}



posted @ 2018-04-19 20:55  宿星  阅读(106)  评论(0编辑  收藏  举报