给定一个长度为 n的数组 a1,a2,…,an。
现在,要将该数组从中间截断,得到三个非空子数组。
要求,三个子数组内各元素之和都相等。
请问,共有多少种不同的截断方法?
输入格式
第一行包含整数 n。
第二行包含 n个整数 a1,a2,…,an。
输出格式
输出一个整数,表示截断方法数量。
数据范围
前六个测试点满足 1≤n≤10
所有测试点满足 1≤n≤10^5,−10000≤ai≤10000
输入样例1:
4
1 2 3 3
输出样例1:
1
输入样例2:
5
1 2 3 4 5
输出样例2:
0
输入样例3:
2
0 0
输出样例3:
0
#include<stdio.h>
#define N 100010
int s[N];
int main(){
int n;
long long int count1 = 0, count2 = 0;
scanf("%d",&n);
for(int i = 1;i <= n;i++){
scanf("%d",&s[i]);
s[i]+=s[i-1];
}
if(s[n]%3!=0){
printf("0");
return 0;
}
for(int i=3;i<=n;i++){
if(s[i-2] == s[n]/3)
count1++;
if(s[n]-s[i-1] == s[n]/3)
count2+=count1;
}
printf("%lld",count2);
return 0;
}