import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) { int a = in.nextInt(); long[] num = new long[a];//num[]存储题目所给的数组 long[] num2 = new long [a];//num2[]是数组num的前n项和 long[] num3 = new long [a];//num3[]存储数组num前n项包含的正数个数 long plus = 0;//plus用于num正数个数计数 long sum = 0;//sum用于数组num求和 for (int i = 0; i < a; i++) { num[i] = in.nextInt();//输入数组数据 sum = sum + num[i]; num2[i] = sum;//存储数组num前n项和 if (num[i] > 0) { plus++; } num3[i] = plus;//记录数组正数个数 } int count = 0;//count记录符合题意的划分方案 Vector<Integer> left = new Vector(); Vector<Integer> right = new Vector();//left和right分别记录从左和从右开始部分和为sum/3的下标 long left_sum = 0; long right_sum = 0; for (int j = 0; j < a - 2; j++) { left_sum = left_sum + num[j]; if (left_sum == sum / 3 && sum % 3 == 0) { left.add(j); } } for (int k = a - 1; k > 1; k--) { right_sum = right_sum + num[k]; if (right_sum == sum / 3 && sum % 3 == 0) { right.add(k); } } //两重for循环遍历 for (int le : left) { //第一重循环剪枝,排除第一部分没有正数的情况 if (num3[le] > 0) { for (int ri : right) { //保证左侧下标小于右侧下标 if (le < ri) { { //判断中间和右侧部分是否有正数 if ( num3[ri - 1] - num3[le] > 0 && num3[a - 1] - num3[ri] >= 0) { count++; } } } } } } //循环结束,输出最终结果 System.out.println(count); } } }