Advertisement
Milov

1929 плюшевые медвежата и ненависть

Nov 7th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. n, m = map(int, input().split()) # Ввод: всего человек, сколько ТH
  2. k = n - m # Вычисляет сколько обычных
  3. lst = list(map(int, input().split())) # Список для ТH
  4. H = 1 in lst # Переменная, определяющая, является ли Холден ТH
  5. if n // 3 > m: # Если кол-во ТH меньше чем кол-во отрядов, то отряды сформировать невозможно
  6. print(0)
  7. elif n // 3 == m: # Если кол-во ТH равно кол-ву отрядов, то появляются два варианта:
  8. if H: # Если Холден - ТH, то кол-во комбинаций вычисляется по следующей формуле:
  9. print(k * (k - 1) // 2) # 1 Все ТН распределены по 1 в отряд, а для не ТН кол-во комбинаций = k+(k-1)+...+1
  10. else: # Если Холден не ТH то по этой:
  11. print(m * (k - 1)) # 2 Для каждого отряда есть k-1 комбинация, т.к. Холден всегда в одном отряде то из k вычитаем 1
  12. elif n // 3 + 1 == m: # Если кол-во ТH больше чем кол-во отрядов на 1, то:
  13. if H: # Если Холден ТH:
  14. print((k * (m - 1)) + (k * (k - 1) // 2)) # Распределяем обычных по старой формуле,
  15. # к ним прибавляем распределение ТН, как в формуле 2, только ТН и обычные люди меняются местами
  16. else: # Если Холден не ТH:
  17. print((m * (k - 1)) + (m * (m - 1) // 2)) #Все те же формулы, только переменные меняются
  18. else: # Если кол-во ТH больше чем кол-во отрядов, то:
  19. if H: # Если Холден ТH:
  20. print((k * (k - 1) // 2) + (k * (m - 1)) + ((m - 1) * (m - 2) // 2)) # Вторая использованная формула расчитана
  21. # на отряд с Холденом, третья на общий случай для остальных отрядов (их меньше на 1)
  22. else: # Если Холден не ТH:
  23. print(((k - 1) * m) + (m * (m - 1) // 2))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement