Кластеры режимов солнечных панелей

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

Условие

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

Во второй таблице находятся измерения с отдельных панелей. Измерение относится к тому эталонному режиму, расстояние до которого минимально. Для измерения с координатами (e, s) и режима с координатами (E, S) используется евклидово расстояние

d = sqrt((e - E)^2 + (s - S)^2).

Строка измерений, в которой хотя бы одно из двух значений равно NA, считается пропуском и не относится ни к одному кластеру. Необходимо вывести размеры кластеров в порядке строк таблицы эталонных режимов. Если расстояние до нескольких режимов одинаково и минимально, выбирается режим с лексикографически меньшим кодом. Пустому кластеру соответствует размер 0. Все выводимые значения целые, округление не применяется.

Формат ввода

В первой строке даны два целых числа n и k: количество строк во второй таблице и количество эталонных режимов в первой таблице.

В следующих k строках задана первая таблица эталонных режимов. Каждая строка содержит код режима code, целое значение energy и целое значение sunlight.

В следующих n строках задана вторая таблица измерений. Каждая строка содержит код измерения record, значение выработки energy и значение освещённости sunlight. Вместо каждого из двух числовых значений может находиться строка NA.

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

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

Ограничения

1 <= n <= 1000.

1 <= k <= 50.

Коды code и record состоят из строчных латинских букв, цифр и символа _, их длина составляет от 1 до 12 символов.

Коды режимов попарно различны.

Для эталонных режимов 0 <= energy, sunlight <= 100000.

Для измерений каждое значение energy и sunlight либо равно NA, либо является целым числом от 0 до 100000.

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

Куда дальше