Вероятность успешных кормлений

тема: Вероятность и матожидание · уровень: средний

Условие

В зоопарке на каждый день составляется список запланированных кормлений. Для каждого кормления курьерская служба независимо от остальных должна доставить нужный рацион.

Вероятность успешной доставки для любого кормления равна p. В расписании записано n кормлений. Имя животного нужно только для описания расписания и не влияет на вероятность доставки. Символ - означает, что имя животного в расписании пока не указано.

Случайная величина X равна числу успешных доставок среди всех n кормлений. Требуется для указанного в конце входа значения k найти вероятность P(X = k). Используется биномиальная схема:

P(X = k) = C(n, k) · p^k · (1 - p)^(n-k),

где C(n, k) = n! / (k! · (n-k)!).

Каждая строка расписания считается отдельным кормлением, даже если в нескольких строках записано одинаковое имя животного. При равенстве имён строки не объединяются.

Формат ввода

В первой строке заданы два значения: целое число n — количество запланированных кормлений и десятичное число p — вероятность успешной доставки одного корма.

В следующих n строках записаны имена животных. Имя состоит из строчных латинских букв либо равно -.

В последней строке задано целое число k — запрошенное число успешных доставок.

Формат вывода

Выведите одно число: вероятность того, что успешными окажутся ровно k кормлений.

Ответ необходимо округлить до четырёх знаков после десятичной точки. Если пятая цифра после точки равна 5 или больше, четвёртая цифра увеличивается на 1.

Ограничения

1 ≤ n ≤ 2000.

0 ≤ p ≤ 1, число p задано десятичной записью не более чем с 6 знаками после точки.

0 ≤ k ≤ n.

Длина каждого имени животного составляет от 1 до 20 символов. Допустимы строчные латинские буквы и отдельное значение -.

Пустого расписания не бывает, так как n ≥ 1.

Решить задачу с автопроверкой на Python →

Куда дальше