Обновление центров тренировок

тема: Кластеризация: k-means · уровень: средний

Условие

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

Даны начальные центры групп тренировок. Требуется выполнить ровно одну итерацию метода k-means: распределить все полностью заполненные тренировки по ближайшим центрам, затем пересчитать координаты центров. Тренировки с пропуском хотя бы одного признака при распределении и пересчёте не используются.

Для тренировки с координатами $(x, y)$ и центра с координатами $(a, b)$ используется квадрат евклидова расстояния: $d^2=(x-a)^2+(y-b)^2$. Тренировка относится к центру с наименьшим значением $d^2$. Новая координата центра равна среднему арифметическому соответствующих координат всех тренировок, отнесённых к этому центру.

Если расстояния до нескольких центров равны, тренировка относится к центру с меньшим номером во входных данных. Гарантируется, что после распределения у каждого центра есть хотя бы одна тренировка. Каждую координату нового центра нужно округлить до ближайшей сотой, а при точной середине округлить вверх.

Формат ввода

В первой строке записаны два целых числа $n$ и $k$ — число строк дневника и число начальных центров.

В следующих $k$ строках записаны по два целых числа: длительность и пульс начального центра. Центры пронумерованы от 1 до $k$ в порядке этих строк.

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

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

Выведите $k$ строк в порядке начальных центров. В каждой строке выведите две координаты нового центра: длительность и пульс.

Каждую координату выводите ровно с двумя знаками после точки.

Ограничения

$1 \le n \le 2000$.

$1 \le k \le 20$.

$k \le n$.

Длительность начального центра и заполненной тренировки — целое число от 1 до 600.

Пульс начального центра и заполненной тренировки — целое число от 40 до 240.

Каждое поле во входных строках имеет длину от 1 до 3 символов, кроме символа -, имеющего длину 1.

Каждая строка тренировки содержит ровно два поля.

Полностью заполненных тренировок не меньше $k$, и после распределения по описанному правилу ни одна группа не остаётся пустой.

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

Куда дальше