Codeforces Gym101473 F.Triangles-前缀和 (2013-2014 ACM-ICPC Brazil Subregional Programming Contest)
前缀和。
代码:
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 }
最近做了好几个和前缀和有关的题目,都是前缀和,然后标记前缀和的写法。