Самая частая путаница результатов партий

тема: Метрики классификации · уровень: продвинутый

Условие

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

Результат партии кодируется одной буквой: W — победа белых, B — победа чёрных, D — ничья. Строки двух таблиц сопоставляются по идентификатору партии.

Для каждой упорядоченной пары различных меток (a, p) определяется число ошибок классификатора \[ C(a,p)=\sum I(y_i=a \text{ и } \hat y_i=p), \] где суммирование идёт по партиям, присутствующим в обеих таблицах, y_i — фактический результат, \hat y_i — прогноз, а I равно 1, если условие верно, и 0 иначе. Требуется найти пару (a, p) с наибольшим значением C(a,p): сначала фактическую метку, затем ошибочно предсказанную метку.

Прогноз для некоторых партий может отсутствовать: такие партии не участвуют в подсчёте. Для каждой пары, не встретившейся среди ошибок, значение C(a,p) равно 0. Гарантируется, что хотя бы одна ошибочно предсказанная партия существует. Если наибольшее значение достигается у нескольких пар, выводится лексикографически наименьшая пара меток. Порядок меток при лексикографическом сравнении: B < D < W.

Формат ввода

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

В следующих n строках находятся идентификатор партии game_id и её фактический результат actual.

В следующих m строках находятся идентификатор партии game_id и прогноз классификатора predicted.

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

Выведите через пробел две метки: фактический результат и наиболее часто перепутанный с ним прогноз.

Округление не применяется.

Ограничения

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

Куда дальше