def solve(): # 读取输入 n = int(input()) arr = list(map(int, input().split())) # 如果数组长度小于3,无法分成3部分,直接输出0 if n < 3: print(0) return # 计算数组总和 total_sum = sum(arr) # 如果总和不能被3整除,无法分成3个和相等的子数组,直接输出0 if total_sum % 3 != 0: print(0) return # 计算每个子数组的目标和 target = total_sum // 3 # 计算前缀和数组,prefix_sum[i]表示前i个元素的和 prefix_sum = [0] * (n + 1) for i in range(1, n + 1): prefix_sum[i] = prefix_sum[i - 1] + arr[i - 1] # 计算前缀正数个数数组,prefix_positive[i]表示前i个元素中正数的个数 prefix_positive = [0] * (n + 1) for i in range(1, n + 1): prefix_positive[i] = prefix_positive[i - 1] + (1 if arr[i - 1] > 0 else 0) # 寻找所有可能的第一分割点i,满足前i项和等于target且至少包含一个正数 candidates_i = [] for i in range(1, n - 1): # i最多到n-2,确保后面至少有两个元素 if prefix_sum[i] == target and prefix_positive[i] >= 1: candidates_i.append(i) # 寻找所有可能的第二分割点j,满足前j项和等于2*target且第三部分至少包含一个正数 candidates_j = [] for j in range(2, n): # j最多到n-1,确保第三部分至少有一个元素 if ( prefix_sum[j] == 2 * target and (prefix_positive[n] - prefix_positive[j]) >= 1 ): candidates_j.append(j) # 统计满足条件的分割方案数 count = 0 for j in candidates_j: # 遍历所有i < j的候选分割点i,确保中间部分至少有一个正数 for i in candidates_i: if i >= j: continue # 确保i < j if prefix_positive[j] - prefix_positive[i] >= 1: count += 1 print(count) solve()