Выбор разбиения въездов и выездов парковки

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

Условие

Камеры парковки торгового центра зафиксировали точки въезда и выезда автомобилей. Каждая запись содержит две координаты точки и два варианта готового разбиения записей на группы.

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

Для точки с координатами (x_i, y_i) и центра её группы (c_x, c_y) вклад точки равен (x_i - c_x)^2 + (y_i - c_y)^2. Необходимо определить, у какого из двух разбиений инерция меньше.

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

Формат ввода

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

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

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

Выведите 1, если инерция первого разбиения не больше инерции второго, и 2 в противном случае.

Ограничения

1 ≤ n ≤ 2000.

0 ≤ x, y ≤ 10000.

1 ≤ g1, g2 ≤ 3.

Пропусков в данных нет. Группа может состоять из одной точки, её вклад в инерцию равен нулю. Группы, номер которых не встретился во входных данных, не рассматриваются.

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

Куда дальше