CSES - Kurssi

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

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

Voit olettaa, että 1x1001 \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=40x=40, joka viikko tulee suorittaa 55 tehtävää. Tehtävät voidaan suorittaa 40!40! järjestyksessä ja joka viikko on (85){8 \choose 5} tapaa valita suoritettavat tehtävät, joten vastaus on 40!(85)840! \cdot {8 \choose 5}^8. Kun x=64x=64, tulee suorittaa kaikki kurssin tehtävät, joten vastaus on 64!64!.