CSES - Tasajako

Annettuna on lista, jossa on kokonaislukuja. Tehtäväsi on laskea, monellako tavalla listan voi halkaista kahteen osaan niin, että jokainen listan luku esiintyy sekä vasemmassa että oikeassa osassa.

Esimerkiksi listassa [1,2,1,2,1,2] vastaus on 3, koska mahdolliset halkaisutavat ovat [1,2]+[1,2,1,2], [1,2,1]+[2,1,2] sekä [1,2,1,2]+[1,2].

Toteuta tiedostoon samesplit.py funktio count_splits, jolle annetaan parametrina lista lukuja. Funktion tulee palauttaa halkaisutapojen määrä.

Funktion tulee toimia tehokkaasti suurillakin listoilla. Tehtäväpohjan kahdessa viimeisessä testissä listat ovat suuria ja funktion tulee palauttaa vastaus niissäkin tapauksissa välittömästi.

def count_splits(numbers):
    # TODO

if __name__ == "__main__":
    print(count_splits([1, 1, 1, 1])) # 3
    print(count_splits([1, 1, 2, 1])) # 0
    print(count_splits([1, 2, 1, 2])) # 1
    print(count_splits([1, 2, 3, 4])) # 0
    print(count_splits([1, 2, 1, 2, 1, 2])) # 3

    numbers = [1, 2] * 10**5
    print(count_splits(numbers)) # 199997
    numbers = list(range(1, 10**5 + 1)) * 2
    print(count_splits(numbers)) # 1