Инерция времени обработки заявок

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

Условие

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

Значение NA во второй таблице означает, что время обработки пока неизвестно. Такие заявки не учитываются в расчёте. Для каждой группы рассматриваются только заявки этой группы с известным временем обработки.

Необходимо найти инерцию распределения заявок по группам. Если для группы g известны времена обработки x1, x2, ..., xk, её центр равен среднему арифметическому cg = (x1 + x2 + ... + xk) / k. Инерция равна сумме квадратов расстояний до центров своих групп:

I = Σ (xi - cg)²,

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

Формат ввода

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

Следующие n строк содержат таблицу заявок. В каждой строке записаны идентификатор заявки id и название группы group.

Следующие m строк содержат таблицу времени обработки. В каждой строке записаны идентификатор заявки id и значение minutes. Значение minutes равно целому числу либо строке NA.

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

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

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

Ограничения

1 ≤ n, m ≤ 1000.

n + m ≤ 2000.

Идентификатор заявки — целое число от 1 до 10^9.

Название группы состоит из строчных латинских букв и цифр, его длина от 1 до 12 символов.

Известное время обработки — целое число от 0 до 100000 минут.

Все идентификаторы в первой таблице различны. Все идентификаторы во второй таблице различны. Наборы идентификаторов в обеих таблицах совпадают.

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

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

Куда дальше