Skip to content

Instantly share code, notes, and snippets.

@KolosovAO
Created June 26, 2018 13:28
Show Gist options
  • Save KolosovAO/815680f9755c3a6aa60e9fa6f1791728 to your computer and use it in GitHub Desktop.
Save KolosovAO/815680f9755c3a6aa60e9fa6f1791728 to your computer and use it in GitHub Desktop.
# Вначале нужно найти сколько баллов можно набрать, если сдать все на минимум.
# Оставшиеся баллы можно расскидать между заданиями.
# Количество вариантов будет равно числу сочетаний с повторениями:
# (n + k - 1)! / k!(n - 1)!

def fact(n):
    if n < 2:
        return 1
    return n * fact(n - 1)

def solve(tasks, total, minscore):
    dif = total - tasks * minscore
    if dif < 0:
       raise Exception('its impossible')
    return fact(dif + tasks - 1) // fact(dif) // fact(tasks - 1)

print(solve(2,5,2))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment