Проверка SLA по актуальному тарифу

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

Условие

В службе поддержки провайдера для каждой заявки известен тариф клиента и фактическое время первого ответа оператора. Значение -1 означает, что первый ответ ещё не был дан.

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

В конце входа указан запрос из идентификаторов заявок. Для каждой заявки из запроса определяется индикатор нарушения SLA: I = 1, если фактическое время первого ответа строго больше норматива тарифа, и I = 0 иначе. Для заявки с временем ответа -1 индикатор всегда равен 0. Требуется вывести сумму индикаторов по всем заявкам из запроса. Все идентификаторы в запросе различны и существуют среди заявок.

При равенстве наибольших номеров дня для одного тарифа выбирается запись, расположенная позже во входных данных.

Формат ввода

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

В следующих n строках заданы сведения о заявках в формате: ticket_id plan_code response_minutes

Здесь ticket_id — идентификатор заявки, plan_code — код тарифа, response_minutes — фактическое время первого ответа в минутах или -1.

В следующих m строках задан справочник тарифов в формате: plan_code effective_day sla_minutes

Здесь effective_day — номер дня вступления версии тарифа в силу, sla_minutes — норматив первого ответа в минутах.

В последних q строках записаны идентификаторы заявок, входящих в запрос.

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

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

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

Ограничения

1 ≤ n ≤ 4000, 1 ≤ m ≤ 4000, 1 ≤ q ≤ n.

n + m ≤ 4000.

1 ≤ ticket_id ≤ 10^9, все идентификаторы заявок различны.

Длина plan_code составляет от 1 до 12 символов. Код состоит из строчных латинских букв.

response_minutes = -1 или 0 ≤ response_minutes ≤ 100000.

1 ≤ effective_day ≤ 100000, 1 ≤ sla_minutes ≤ 100000.

Для каждого кода тарифа, указанного в заявках, существует хотя бы одна запись в справочнике.

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

Куда дальше