Жанр фильма по ближайшим карточкам
Условие
В онлайн-кинотеатре есть таблица жанров уже размеченных фильмов и отдельная таблица их технических карточек. Строки этих таблиц расположены в разном порядке, поэтому их необходимо сопоставлять по идентификатору фильма.
Для нового фильма с идентификатором TARGET нужно предсказать один жанр методом взвешенных ближайших соседей. В технической карточке указаны длительность в минутах и оценка критиков от 0 до 100. Значение NA означает, что соответствующий параметр неизвестен.
Для размеченного фильма i рассматриваются только параметры, известные и у фильма i, и у TARGET. Расстояние Манхэттена равно d_i = сумма |a_j - b_j| по всем таким параметрам j. Вес фильма i равен w_i = 1 / d_i. Выбираются k фильмов с наименьшими расстояниями, после чего для каждого жанра суммируются веса выбранных фильмов этого жанра. Ответом является жанр с наибольшей суммой весов.
Для каждого размеченного фильма хотя бы один параметр известен также у TARGET, а расстояние до TARGET строго больше нуля. При равенстве расстояний при выборе соседей раньше выбирается фильм с лексикографически меньшим идентификатором. Если наибольшая сумма весов достигается у нескольких жанров, выводится лексикографически меньший жанр. Округление не применяется.
Формат ввода
В первой строке даны два целых числа n и k — число размеченных фильмов и число соседей.
В следующих n строках находится первая таблица. Каждая строка содержит идентификатор фильма movie_id и его жанр genre.
В следующих n + 1 строках находится вторая таблица. Каждая строка содержит идентификатор фильма movie_id, длительность duration и оценку критиков critics_score. Вместо числового значения длительности или оценки может стоять строка NA.
Во второй таблице ровно одна строка имеет идентификатор TARGET. Все остальные её идентификаторы совпадают с идентификаторами из первой таблицы, каждый встречается ровно один раз.
Формат вывода
Выведите один жанр, предсказанный для фильма TARGET.
Ограничения
1 <= n <= 3999.
1 <= k <= n.
Идентификатор размеченного фильма состоит из латинской буквы M и от 1 до 15 десятичных цифр. Его длина не превосходит 16 символов.
Жанр — одно из слов action, comedy, drama, fantasy. Длина жанра не превосходит 7 символов.
Если значение не равно NA, то 1 <= duration <= 300 и 0 <= critics_score <= 100.
Во второй таблице не более 4000 строк. У TARGET известны оба технических параметра. Для каждого размеченного фильма имеется хотя бы один общий с TARGET известный параметр, а вычисленное расстояние до TARGET не равно нулю.
Решить задачу с автопроверкой на Python →
Куда дальше
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами
- На программиста по олимпиаде: путь по классам — что даёт диплом, куда с ним берут на ИТ-направления и почему решает 9 класс
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт