Вероятность личного рекорда на спартакиаде

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

Условие

На школьной спартакиаде результаты забегов собирают по отдельным группам участников. В одной строке отчёта указаны дистанция, число участников группы и число участников, установивших личный рекорд.

У некоторых групп число личных рекордов ещё не внесено в протокол. В таком случае в третьем столбце стоит значение -1; такие строки не учитываются при расчёте.

Для каждой запрошенной дистанции требуется найти вероятность того, что случайно выбранный участник среди всех участников групп с известными результатами на этой дистанции установил личный рекорд. Если для дистанции есть группы с номерами j, числом участников m_j и числом личных рекордов r_j, то используется формула полной вероятности:

P(рекорд) = Σ ((m_j / M) · (r_j / m_j)),

где M = Σ m_j, а сумма берётся только по строкам с известным числом рекордов. Все запросы гарантированно имеют хотя бы одну строку с известным числом рекордов.

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

Формат ввода

В первой строке записаны два целых числа n и q — число строк отчёта и число запросов.

В следующих n строках записаны три целых числа d, m, r:

В следующих q строках записано по одному целому числу x — дистанция очередного запроса.

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

Выведите q строк. В строке с номером запроса выведите искомую вероятность для соответствующей дистанции ровно с четырьмя знаками после десятичной точки.

Ограничения

1 ≤ n ≤ 2000.

1 ≤ q ≤ 100.

1 ≤ d, x ≤ 10000.

1 ≤ m ≤ 10000.

r = -1 или 0 ≤ r ≤ m.

Для каждой запрошенной дистанции существует хотя бы одна строка с этой дистанцией и значением r, не равным -1.

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

Куда дальше