Bardzo Ulubiony Ciąg

시간 제한6초메모리 제한1024 MB

요약
길이 n 배열의 모든 부분 배열 합을 나열한 뒤 그중 값이 0이 되는 i<j<k인 인덱스 삼중항의 개수를 센다.
난이도

보통10점 중 7점

유형
해시맵, 누적 합, 조합론, 구현
정답자
아직 제출이 없습니다

문제

3SUM to znany problem algorytmiczny, w którym dla danego ciągu liczb całkowitych c1, c2, . . . , cm należy znaleźć trzy indeksy i < j < k takie, że ci + cj + ck = 0.

Nie jest znane rozwiązanie tego problemu dla dowolnych ciągów liczb całkowitych w złożoności istotnie lepszej niż O(m2). Na szczęście Bajtek tego nie wie i postanowił rozwiązać ten problem dla swojego Bardzo Ulubionego Ciągu.

Ulubiony Ciąg Bajtka składa się z n liczb całkowitych a1, a2, . . . , an. Bardzo Ulubiony Ciąg Bajtka powstaje poprzez spojrzenie na wszystkie n(n+1)/2 spójnych przedziałów Ulubionego Ciągu Bajtka, obliczenie sum elementów w nich i umieszczenie wszystkich tych sum w jednym ciągu (uwzględniając powtórzenia). Sumy przedziałów układamy w kolejności rosnącej po indeksie początku przedziału, a w przypadku remisu w kolejności rosnącej po indeksie końca przedziału.

Żeby nie było za prosto, Bajtka nie interesuje znalezienie trójki indeksów i < j < k. Chciałby on poznać dokładną liczbę wszystkich trójek indeksów i < j < k odpowiadających elementom, które sumują się do zera. Pomóż mu i napisz program, który obliczy dla niego liczbę takich trójek!

입력

W pierwszym wejściu standardowego wejścia znajduje się liczba całkowita n (1 ≤ n ≤ 500), oznaczająca długość Ulubionego Ciągu Bajtka.

W kolejnym znajduje się n liczb całkowitych ai (|ai| ≤ 20 000), oznaczających kolejne elementy Ulubionego Ciągu Bajtka.

출력

W pierwszym i jedynym wierszu standardowego wyjścia powinna znaleźć się jedna liczba całkowita – liczba trójek indeksów i < j < k odpowiadających wyrazom Bardzo Ulubionego Ciągu Bajtka, które sumują się do 0.

힌트

Wyjaśnienie przykładu: W pierwszym teście przykładowym Bardzo Ulubiony Ciąg to [7, 3, 1, −4, −6, −2], a jedyną trójką różnych elementów sumujących się do 0 jest 3 + 1 + (−4), stąd odpowiedzią jest 1.

W drugim teście przykładowym Bardzo Ulubiony Ciąg Bajtka składa się z pięćdziesięciu pięciu zer. Dla dowolnych trzech indeksów i < j < k suma odpowiadających im elementów jest równa 0, a takich trójek jest 26 235.

예제2

  1. 예제 1

    입력
    3
    7 -4 -2
    
    예상 출력
    1
    
  2. 예제 2

    입력
    10
    0 0 0 0 0 0 0 0 0 0
    
    예상 출력
    26235