Датчики во всех запрошенных месяцах

тема: Связывание таблиц · уровень: продвинутый

Условие

В теплице установлены датчики температуры. Каждая строка журнала содержит идентификатор датчика, номер месяца и показание температуры. Одному датчику может соответствовать несколько строк за один месяц.

Показание NA означает, что измерение пропущено и не считается записью с температурой. В конце журнала задан запрос: список месяцев, для которых требуется найти датчики с хотя бы одним непропущенным показанием в каждом из этих месяцев.

Для датчика s обозначим через M(s) множество месяцев, в которых у него есть хотя бы одна строка с показанием, отличным от NA. Пусть Q — множество месяцев из запроса. Требуется вычислить количество датчиков

|{ s : Q ⊆ M(s) }|.

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

Формат ввода

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

В следующих n строках заданы три значения: идентификатор датчика sensor_id, номер месяца month и показание temperature. Показание равно целому числу или строке NA.

В следующей строке задано целое число q — количество месяцев в запросе.

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

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

Выведите одно целое число — количество датчиков, имеющих допустимую запись в каждом месяце запроса.

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

Ограничения

1 ≤ n ≤ 4000.

1 ≤ q ≤ 12.

1 ≤ month ≤ 12.

Все месяцы в запросе различны и лежат в диапазоне от 1 до 12.

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

Если temperature не равно NA, то это целое число от -50 до 80.

Пустых строк во входных данных нет.

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

Куда дальше