Ближайший результат после нормировки

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

Условие

На школьной спартакиаде для каждого участника записаны время забега на 400 метров и результат прыжка в длину. Тренер хочет найти участника, чьи результаты наиболее похожи на заданный профиль.

Перед сравнением каждый признак нормируется отдельно по всем участникам. Для времени забега и длины прыжка минимальное значение переводится в 0, максимальное — в 1, остальные значения располагаются между ними.

Для значения признака x его нормированное значение равно z = (x - min) / (max - min), где min и max — минимум и максимум этого признака среди n участников. Если для некоторого признака min = max, нормированное значение этого признака для всех участников и для заданного профиля считается равным 0.

Для каждого участника вычисляется квадрат евклидова расстояния до заданного профиля: d² = (z_время - z_время_профиля)² + (z_прыжок - z_прыжок_профиля)². Требуется вывести номер участника с наименьшим d². Номера участников начинаются с 1 в порядке строк во входных данных. Если наименьшее расстояние достигается у нескольких участников, выводится участник с наименьшим номером.

Формат ввода

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

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

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

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

Выведите одно целое число — номер ближайшего участника.

Округление не применяется, так как выводится целый номер участника.

Ограничения

1 ≤ n ≤ 4000.

600 ≤ время забега ≤ 3600.

100 ≤ длина прыжка ≤ 800.

Все значения во входных данных являются целыми числами, пропусков в данных нет.

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

Куда дальше