Число совпадений результатов забега

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

Условие

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

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

В конце входа перечислены коды дистанций, для которых требуется посчитать число строк внутреннего соединения журналов. Если для ключа k имеется a(k) строк в журнале старта и b(k) строк в журнале финиша, то этот ключ даёт a(k) * b(k) строк соединения. Ответ равен сумме a(k) * b(k) по всем ключам, код дистанции которых указан в запросе.

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

Формат ввода

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

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

В следующих m строках записаны код дистанции и номер участника из журнала финиша.

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

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

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

Ограничения

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

1 <= q <= 100.

Номер участника — целое число от 1 до 999999.

Код дистанции состоит из латинских букв, цифр и символа -, его длина от 2 до 12 символов.

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

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

Куда дальше