CSES - Kurssi

Kurssi muodostuu 8 viikosta, joista jokaisella on 8 tehtävää. Kurssista saa suorituksen, jos ratkaisee vähintään 5 tehtävää kullakin viikolla.

Monellako tavalla voit suorittaa kurssin niin, että ratkot yhteensä x tehtävää? Kaksi suoritustapaa ovat erilaiset, jos listat, jotka sisältävät ratkotut tehtävät ratkomisjärjestyksessä, ovat erilaiset.

Voit olettaa, että 1 \le x \le 100. Koodisi tulee toimia tehokkaasti kaikissa näissä tapauksissa. Koodin tulee laskea tulokset eikä palauttaa etukäteen laskettuja tuloksia.

Toteuta tiedostoon course.py funktio count, joka kertoo, monellako tapaa kurssin voi suorittaa.

def count(x):
    # TODO

if __name__ == "__main__":
    print(count(40)) # 78913132667888442497725132524762783866832203758436352000000000
    print(count(55)) # 320424698352073967965876852452014215914220727801318938295395908593909760000000000000
    print(count(64)) # 126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000
    print(count(100)) # 0

Selitys: Kun x=40, joka viikko tulee suorittaa 5 tehtävää. Tehtävät voidaan suorittaa 40! järjestyksessä ja joka viikko on {8 \choose 5} tapaa valita suoritettavat tehtävät, joten vastaus on 40! \cdot {8 \choose 5}^8. Kun x=64, tulee suorittaa kaikki kurssin tehtävät, joten vastaus on 64!.