#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); }
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); } |