Ближайшие посещения по двум метрикам

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

Условие

В журнале посещений школьного сайта для каждого визита сохранены число просмотренных страниц и число активных минут. Некоторые значения могут отсутствовать и обозначаются строкой NA.

Дан запрос с характеристиками нового визита и записи прошлых посещений. Необходимо отдельно найти ближайшую запись по манхэттенскому и по евклидову расстояниям.

В расстоянии участвуют только характеристики, известные и у запроса, и у рассматриваемой записи. Манхэттенское расстояние равно сумме модулей разностей по участвующим характеристикам: d_M = Σ |x_i - y_i|. Евклидово расстояние равно d_E = sqrt(Σ (x_i - y_i)^2). Для каждой записи гарантируется, что хотя бы одна характеристика участвует в расчёте.

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

Формат ввода

В первой строке дано целое число n — количество записей в журнале.

Во второй строке заданы два значения запроса: pages_viewed и active_minutes.

В следующих n строках заданы характеристики записей журнала в том же порядке: pages_viewed и active_minutes. Номер первой записи равен 1, второй — 2 и так далее.

Каждое значение характеристики является целым числом или строкой NA.

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

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

Ограничения

1 ≤ n ≤ 2000.

Если значение не равно NA, то 0 ≤ pages_viewed ≤ 200, 0 ≤ active_minutes ≤ 600.

В строке запроса известна хотя бы одна характеристика.

В каждой записи журнала известна хотя бы одна характеристика, совпадающая по известности с характеристикой запроса. Поэтому для каждой записи расстояние определено.

Длина каждого входного значения не превышает 3 символов.

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

Куда дальше