Метки показаний по дереву решений

тема: Энтропия, Gini и сплит · уровень: средний

Условие

В доме установлены счётчики электричества. Для каждого показания известны час снятия данных hour и накопленное за интервал потребление usage в ватт-часах.

Готовое дерево решений относит каждое показание к одной из меток: например, normal, attention или overload. Внутренняя вершина дерева проверяет одно из полей показания, а лист содержит итоговую метку.

Путь в дереве определяется точно так: для вершины S feature threshold left right берётся значение v поля feature. Если v <= threshold, следующей вершиной становится left, иначе следующей вершиной становится right. После попадания в лист его метка печатается для данного показания.

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

Формат ввода

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

Следующие n строк описывают вершины с номерами от 1 до n. Корень дерева имеет номер 1.

Внутренняя вершина задаётся строкой:

S feature threshold left right

Здесь feature равно hour или usage, threshold — целый порог, left и right — номера дочерних вершин.

Лист задаётся строкой:

L label

Здесь label — метка, которую возвращает лист.

В следующих q строках даны показания в формате hour usage.

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

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

Ограничения

1 <= n, 1 <= q, n + q <= 2000.

Каждая вершина имеет номер от 1 до n. Дерево корректно: все дочерние вершины существуют, из корня достижим хотя бы один лист, циклов нет.

0 <= hour <= 23.

0 <= usage <= 9999.

Для проверки hour выполняется 0 <= threshold <= 23, для проверки usage выполняется 0 <= threshold <= 9999.

Метка label состоит из строчных латинских букв, её длина от 1 до 20. В показаниях нет пропусков.

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

Куда дальше