前缀和。
代码:
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 typedef long long ll; 8 const int N=5*1e6+10; 9 int a[N]; 10 ll q[N]; 11 ll flag[N]; 12 int main(){ 13 int n; 14 while(~scanf("%d",&n)){ 15 memset(flag,0,sizeof(flag)); 16 int sum=0;int ans=0; 17 for(int i=1;i<=n;i++){ 18 scanf("%d",&a[i]); 19 sum+=a[i]; 20 } 21 if(sum%3!=0)printf("0\n"); 22 else{ 23 q[0]=0;ans=0; 24 for(int i=1;i<=n;i++){ 25 q[i]=q[i-1]+a[i]; 26 flag[q[i]]++; 27 } 28 int ret=sum/3; 29 for(int i=1;i<=n;i++){ 30 if(flag[q[i]+ret]&&flag[q[i]+ret+ret]) 31 ans++; 32 } 33 printf("%d\n",ans); 34 } 35 } 36 return 0; 37 }
最近做了好几个和前缀和有关的题目,都是前缀和,然后标记前缀和的写法。