Самое информативное слово запроса
Условие
В пункте выдачи для каждой посылки сохранён набор слов из её краткого описания. Одно и то же слово может несколько раз встретиться в описании одной посылки, например после объединения данных из разных наклеек.
Для слова w определяется обратная частота документа, IDF:
IDF(w) = ln(n / df(w)),
где n — число посылок, а df(w) — число посылок, в описании которых слово w встретилось хотя бы один раз. Повторы слова внутри одного описания увеличивают его частоту, но не увеличивают df(w).
После описаний задан запрос из нескольких различных слов. Требуется вывести слово из запроса с наибольшим значением IDF. Все слова запроса встречаются хотя бы в одном описании посылки. Если наибольшее значение IDF достигается у нескольких слов, выводится лексикографически меньшее слово. Округление не применяется, так как выводится слово.
Формат ввода
В первой строке дано целое число n — количество посылок.
В следующих n строках находятся описание одной посылки: идентификатор посылки parcel_id, целое число m, затем m слов описания через пробел.
В последней строке находится запрос: целое число q, затем q различных слов запроса через пробел.
Формат вывода
Выведите одно слово из запроса с наибольшим значением IDF.
Ограничения
1 ≤ n ≤ 2000.
Длина идентификатора parcel_id составляет от 1 до 20 символов и содержит только латинские буквы, цифры, символы _ и -.
0 ≤ m ≤ 20.
Каждое слово описания и запроса состоит из строчных латинских букв и имеет длину от 1 до 20 символов.
1 ≤ q ≤ 20.
Слова в запросе различны. Каждое слово запроса встречается хотя бы в одном описании. Описание посылки может быть пустым при m = 0.
Решить задачу с автопроверкой на Python →
Куда дальше
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами