# utwórz BUC na podstawie wejściowego ciągu: def BUC(a): n = len(a) buc = [] for i in range(n): for j in range(i, n): buc.append(sum(a[i:j+1])) return buc def satbuc(a): # 2. Oblicz BUC buc = sorted(BUC(a)) # 3. Oblicz liczbę trójek sumujących się do 0 count = 0 n = len(buc) freq = {} for i in reversed(range(0, n-2)): # -buc[i] = buc[j] + buc[k] for j in range(i+2, n): z = buc[i+1] + buc[j] freq[z] = freq.get(z, 0) + 1 count += freq.get(-buc[i], 0) return count # 1. Wczytaj dane n = int(input()) a = list(map(int, input().split())) print(satbuc(a))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # utwórz BUC na podstawie wejściowego ciągu: def BUC(a): n = len(a) buc = [] for i in range(n): for j in range(i, n): buc.append(sum(a[i:j+1])) return buc def satbuc(a): # 2. Oblicz BUC buc = sorted(BUC(a)) # 3. Oblicz liczbę trójek sumujących się do 0 count = 0 n = len(buc) freq = {} for i in reversed(range(0, n-2)): # -buc[i] = buc[j] + buc[k] for j in range(i+2, n): z = buc[i+1] + buc[j] freq[z] = freq.get(z, 0) + 1 count += freq.get(-buc[i], 0) return count # 1. Wczytaj dane n = int(input()) a = list(map(int, input().split())) print(satbuc(a)) |