Сверка журналов солнечных панелей

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

Условие

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

Ключом записи считается пара из номера дня и идентификатора панели. В одном журнале может быть несколько строк с одинаковым ключом: такие строки описывают один и тот же ключ и должны учитываться только один раз. Значение выработки NA означает, что значение неизвестно, но сама запись с таким ключом существует и участвует в подсчёте.

Для каждого дня из запроса пусть A — множество идентификаторов панелей, имеющих хотя бы одну строку прогноза в этот день, а B — множество идентификаторов панелей, имеющих хотя бы одну строку измерений в этот день. Требуется вывести два числа: |A ∩ B| — число панелей, встречающихся в обоих журналах, и |A Δ B| — число панелей, встречающихся ровно в одном журнале. Здесь A Δ B = (A \ B) ∪ (B \ A).

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

Формат ввода

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

В следующих n строках записаны строки журнала прогноза в формате: day panel_id energy

В следующих m строках записаны строки журнала измерений в таком же формате: day panel_id energy

day — номер дня, panel_id — идентификатор панели, energy — целое число или строка NA.

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

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

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

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

Ограничения

0 ≤ n, m, 1 ≤ n + m ≤ 2000.

1 ≤ q ≤ 100.

1 ≤ day ≤ 366 в строках журналов и в запросах.

panel_id имеет вид P затем от 1 до 4 цифр, длина идентификатора от 2 до 5 символов.

Если energy не равно NA, то 0 ≤ energy ≤ 100000.

Общее число строк двух журналов не превышает 2000.

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

Куда дальше