Разброс сумм случайного чека

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

Условие

Супермаркет хранит сведения о чеках в двух таблицах. В первой таблице указана итоговая сумма каждого чека. Иногда сумма не была передана кассой: тогда вместо неё записан символ -.

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

Пусть случайная величина X равна сумме выбранного чека в копейках. Если известные суммы равны x_i, а соответствующие числа попаданий в выборку равны w_i, то p_i = w_i / Σw_i. Требуется найти генеральную дисперсию D(X) = Σ p_i (x_i - E(X))² и стандартное отклонение σ(X) = √D(X), где E(X) = Σ p_i x_i. При совпадении сумм чеки считаются разными исходами, и их веса складываются только через формулы распределения.

Первой идёт таблица чеков, затем таблица контрольной выборки. Идентификаторы строк требуется сопоставить по значению receipt_id. Гарантируется, что среди чеков с известной суммой есть хотя бы один чек.

Формат ввода

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

Следующие n строк содержат таблицу чеков в формате: receipt_id total

receipt_id — идентификатор чека, total — целое число копеек или символ -, если сумма неизвестна.

Следующие m строк содержат таблицу контрольной выборки в формате: receipt_id selected_count

selected_count — число попаданий чека в контрольную выборку.

Каждый идентификатор встречается ровно один раз в каждой из двух таблиц, и множества идентификаторов в таблицах совпадают.

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

Выведите через пробел два числа: сначала D(X), затем σ(X).

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

Ограничения

1 ≤ n, m ≤ 1000.

n + m ≤ 2000.

Длина receipt_id составляет от 3 до 12 символов латинского алфавита, цифр и символа _.

Для известной суммы выполняется 0 ≤ total ≤ 1 000 000.

1 ≤ selected_count ≤ 1000.

Сумма всех значений selected_count не превосходит 20 000.

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

Куда дальше