Посещения разделов школьного сайта

тема: Комбинаторика для данных · уровень: средний

Условие

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

Нужно посчитать число зарегистрированных сессий, в которых была открыта хотя бы одна из страниц NEWS, OLYMPIAD или RESULTS. События с идентификатором, которого нет в таблице сессий, относятся к неполным данным и не учитываются. Повторные открытия одной страницы в одной сессии не меняют ответ.

Пусть A — множество сессий, открывших NEWS, B — множество сессий, открывших OLYMPIAD, а C — множество сессий, открывших RESULTS. Требуется вывести значение по формуле включения-исключения:

|A ∪ B ∪ C| = |A| + |B| + |C| - |A ∩ B| - |A ∩ C| - |B ∩ C| + |A ∩ B ∩ C|.

При равенстве идентификаторов в нескольких строках таблицы событий все такие строки относятся к одной и той же сессии и учитываются совместно. Пустые множества имеют размер 0.

Формат ввода

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

В следующих n строках записаны таблица сессий: session_id visitor_id.

В следующих m строках записана таблица событий: session_id page.

session_id и visitor_id — целые числа. page — строка из заглавных латинских букв. Среди строк таблицы сессий идентификаторы session_id не повторяются.

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

Выведите одно целое число — количество зарегистрированных сессий, открывших хотя бы одну из трёх страниц NEWS, OLYMPIAD, RESULTS.

Дробная часть отсутствует, выводится целое число.

Ограничения

1 ≤ n ≤ 2000.

0 ≤ m ≤ 2000.

n + m ≤ 2000.

1 ≤ session_id, visitor_id ≤ 10^9.

Длина строки page составляет от 3 до 12 символов.

Каждая строка page состоит только из заглавных латинских букв.

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

Куда дальше