Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- n, m = map(int, input().split()) # Ввод: всего человек, сколько ТH
- k = n - m # Вычисляет сколько обычных
- lst = list(map(int, input().split())) # Список для ТH
- H = 1 in lst # Переменная, определяющая, является ли Холден ТH
- if n // 3 > m: # Если кол-во ТH меньше чем кол-во отрядов, то отряды сформировать невозможно
- print(0)
- elif n // 3 == m: # Если кол-во ТH равно кол-ву отрядов, то появляются два варианта:
- if H: # Если Холден - ТH, то кол-во комбинаций вычисляется по следующей формуле:
- print(k * (k - 1) // 2) # 1 Все ТН распределены по 1 в отряд, а для не ТН кол-во комбинаций = k+(k-1)+...+1
- else: # Если Холден не ТH то по этой:
- print(m * (k - 1)) # 2 Для каждого отряда есть k-1 комбинация, т.к. Холден всегда в одном отряде то из k вычитаем 1
- elif n // 3 + 1 == m: # Если кол-во ТH больше чем кол-во отрядов на 1, то:
- if H: # Если Холден ТH:
- print((k * (m - 1)) + (k * (k - 1) // 2)) # Распределяем обычных по старой формуле,
- # к ним прибавляем распределение ТН, как в формуле 2, только ТН и обычные люди меняются местами
- else: # Если Холден не ТH:
- print((m * (k - 1)) + (m * (m - 1) // 2)) #Все те же формулы, только переменные меняются
- else: # Если кол-во ТH больше чем кол-во отрядов, то:
- if H: # Если Холден ТH:
- print((k * (k - 1) // 2) + (k * (m - 1)) + ((m - 1) * (m - 2) // 2)) # Вторая использованная формула расчитана
- # на отряд с Холденом, третья на общий случай для остальных отрядов (их меньше на 1)
- else: # Если Холден не ТH:
- print(((k - 1) * m) + (m * (m - 1) // 2))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement