1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<stdio.h>
#define N 509
#define M 40000009
inline char nc()
{
	static char buf[99999],*l,*r;
	return l==r&&(r=(l=buf)+fread(buf,1,99999,stdin),l==r)?EOF:*l++;
}
inline void read(int&x)
{
	bool t=0;char c=nc();for(;c<'0'||'9'<c;t|=c=='-',c=nc());
	for(x=0;'0'<=c&&c<='9';x=(x<<3)+(x<<1)+(c^48),c=nc());if(t)x=-x;
}
int n,a[N],cnt[M<<1];long long ans;
main()
{
	read(n);for(int i=1;i<=n;read(a[i]),a[i]+=a[i-1],++i);
	for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)for(int k=j;k<=n;++k)
		++cnt[a[k]-a[j-1]+a[i]+M];
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=n;++j)for(int k=j;k<=n;++k)
			ans+=cnt[-(-a[i-1]+a[k]-a[j-1])+M];
		for(int j=1;j<=n;++j)for(int k=j;k<=n;++k)
			--cnt[a[k]-a[j-1]+a[i]+M];
	}
	for(int j=1;j<=n;++j)for(int k=j;k<=n;++k)
		++cnt[a[k]-a[j-1]+M];
	for(int j=1;j<=n;++j)for(int k=j;k<=n;++k)
		ans-=3*cnt[-(a[k]-a[j-1]<<1)+M];
	for(int j=1;j<=n;++j)for(int k=j;k<=n;++k)if(a[k]==a[j-1])
		ans+=2;
	printf("%lld",ans/6);
}