Ранжирование резюме

Просмотр в формате PDF

Submit solution


Очки: 160
Ограничение по времени: 2.0s
Ограничение по памяти: 256M

Автор:
Problem types
Allowed languages
C++, Python

В HR-системе на одну вакансию поступило несколько резюме. Для каждого кандидата известны:

  • имя name — непустая строка из латинских букв длиной не более 20, все имена различны;
  • опыт работы exp — целое число лет;
  • результат внутреннего тестирования score — целое число баллов;
  • ожидаемая зарплата salary — целое число;
  • список из s навыков skillss различных строк, каждая состоит из строчных латинских букв.

Для вакансии заранее заданы:

  • минимально допустимый опыт min_exp;
  • минимально допустимый балл min_score;
  • максимально допустимая зарплата max_salary;
  • список из r обязательных навыков required.

Кандидат проходит первичный фильтр тогда и только тогда, когда одновременно выполнены все условия:

  • exp >= min_exp;
  • score >= min_score;
  • salary <= max_salary;
  • среди навыков кандидата присутствуют все навыки из required.

Если r = 0, то условие по обязательным навыкам считается выполненным автоматически.

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

rating = score * 10 + matched_optional * 5 + exp * 2 - salary // 10000

Здесь matched_optional — количество навыков кандидата, не входящих в список required.

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

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

Входные данные

Первая строка содержит четыре целых числа min_exp, min_score, max_salary, r.

Вторая строка содержит r названий обязательных навыков, разделённых пробелами. Если r = 0, эта строка пуста, но присутствует.

Третья строка содержит целое число n — количество кандидатов.

Далее следуют описания кандидатов, по два строки на каждого:

  • первая строка содержит name exp score salary s;
  • вторая строка содержит s названий навыков через пробел. Если s = 0, эта строка пуста, но присутствует.

Выходные данные

Выведите имена всех кандидатов, прошедших фильтр, по одному в строке, в порядке, описанном в условии.

Если не прошёл ни один кандидат, выведите ровно одну строку NO CANDIDATES.

Ограничения

  • 0 <= exp <= 60
  • 0 <= score <= 100
  • 1 <= salary <= 10^9
  • 0 <= s <= 20
  • 0 <= r <= 20
  • длина имени не более 20
  • длина каждого навыка не более 20
  • 1 <= n <= 10^4

Примеры

Пример 1

Входные данные

2 40 250000 2
sk0 sk1
4
Ann 2 40 250000 2
sk0 sk1
Bob 5 60 200000 3
sk0 sk1 sk2
Cara 5 60 200000 3
sk0 sk2 sk3
Dan 1 90 100000 3
sk0 sk1 sk4

Выходные данные

Bob
Ann
Пример 2

Входные данные

0 0 1000000000 0

5
alex 10 50 100000 0

brad 10 50 100000 1
sk0
clio 8 60 120000 2
sk1 sk2
dora 8 60 120000 2
sk3 sk4
eric 0 0 1 0

Выходные данные

clio
dora
brad
alex
eric

Комментарии

Еще нет ни одного комментария.