Ошибка прогноза по фолдам забега
Условие
На школьной спартакиаде система прогнозирует время прохождения дистанции участниками. Для проверки качества прогнозов записи разделены на фолды: каждый фолд соответствует отдельной части контрольных данных.
Для каждой дисциплины требуется вычислить среднюю абсолютную ошибку прогноза с учётом размеров фолдов. В некоторых записях фактическое время ещё не известно и обозначено NA. Такие записи не участвуют в расчёте.
Для дисциплины d и фолда f пусть m_f — количество записей этой дисциплины в фолде с известным фактическим временем, а MAE_f — средняя абсолютная ошибка в этом фолде:
MAE_f = (|p_1-a_1| + |p_2-a_2| + ... + |p_m-a_m|) / m_f.
Искомая взвешенная ошибка дисциплины равна
E_d = (m_1 * MAE_1 + m_2 * MAE_2 + ... + m_5 * MAE_5) / (m_1 + m_2 + ... + m_5).
Фолды, в которых для данной дисциплины нет ни одного известного фактического времени, не учитываются. Гарантируется, что для каждой дисциплины из запроса найдётся хотя бы одна запись с известным фактическим временем. При равенстве фактического и прогнозного времени вклад записи в ошибку равен нулю, и все такие записи учитываются независимо.
В последней строке входа дан запрос из одной или нескольких дисциплин. Для каждой дисциплины запроса требуется вывести её значение E_d в том же порядке.
Формат ввода
В первой строке записаны два целых числа n и q — количество записей о забегах и количество дисциплин в запросе.
В следующих n строках записаны пять значений: имя_участника дисциплина фолд прогноз фактическое_время.
имя_участника и дисциплина не содержат пробелов. Поле фактическое_время содержит целое число или строку NA.
В последней строке записаны q названий дисциплин через пробел.
Формат вывода
Выведите q строк. В строке с номером i выведите взвешенную среднюю абсолютную ошибку для i-й дисциплины запроса.
Каждое число выводится ровно с четырьмя знаками после точки. Округление выполняется до ближайшего значения, а при ровно равных расстояниях от двух вариантов выбирается большее значение.
Ограничения
1 ≤ n ≤ 2000.
1 ≤ q ≤ 100.
Номер фолда — целое число от 1 до 5.
Прогноз и известное фактическое время — целые числа от 1 до 36000 секунд.
Длина имени участника — от 1 до 20 символов.
Длина названия дисциплины — от 1 до 20 символов.
Для каждой дисциплины из последней строки существует хотя бы одна запись с этой дисциплиной и известным фактическим временем.
Решить задачу с автопроверкой на Python →
Куда дальше
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами