def splitArraySameAverage(self, A):
from fractions import Fraction
A = [a - Fraction(total, N) for a in A] # 转化后的 A,免于计算 sum
S1 = {A[0]} # 所有 A1 可能的和的集合
# {a + A[i] for a in S1} 在之前选择的基础上选择 A[i] 的新集合
S1 = {a + A[i] for a in S1} | S1 | {A[i]}
S2 = {A[-1]} # 所有 A2 可能的和的集合
for i in range(N//2, N-1):
S2 = {a + A[i] for a in S2} | S2 | {A[i]}
# 为了避免 B 选择了所有的 A,这样 C 就是空了,我们增加一个这样的判断
sleft = sum(A[i] for i in range(N//2))
sright = sum(A[i] for i in range(N//2, N))
return any(-ha in S2 and (ha, -ha) != (sleft, sright) for ha in S1)