Календарь напоминаний

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

Submit solution


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

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

Ассистент календаря хранит список напоминаний и для заданной даты должен определить, какие из них срабатывают в этот день.

Поддерживаются три типа напоминаний:

  • ONCE YYYY-MM-DD title — однократное напоминание на конкретную дату;
  • DAILY YYYY-MM-DD title — ежедневное напоминание, которое срабатывает каждый день, начиная с указанной даты включительно;
  • WEEKLY YYYY-MM-DD title — еженедельное напоминание, которое срабатывает в указанную дату и далее каждые 7 дней.

Дата задаётся в формате YYYY-MM-DD и соответствует григорианскому календарю. Все даты во входных данных корректны.

title — непустая строка длиной от 1 до 40, состоящая из печатаемых ASCII-символов. Внутри названия могут встречаться пробелы. Между типом напоминания, датой и названием находится ровно один пробел.

Необходимо вывести все напоминания, которые срабатывают в заданную дату, в том же порядке, в котором они были перечислены во входных данных.

Напоминание типа ONCE срабатывает только тогда, когда запрошенная дата совпадает с датой напоминания.

Напоминание типа DAILY срабатывает, если запрошенная дата не раньше даты начала.

Напоминание типа WEEKLY срабатывает, если запрошенная дата не раньше даты начала, а разница между этими датами в днях кратна 7.

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

В первой строке содержится целое число n — количество напоминаний.

В следующих n строках задано по одному напоминанию в одном из форматов, описанных в условии.

В последней строке задана дата YYYY-MM-DD — дата, для которой нужно определить список срабатывающих напоминаний.

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

В первой строке выведите количество напоминаний k, которые срабатывают в указанную дату.

В следующих k строках выведите названия этих напоминаний в порядке их появления во входных данных.

Если k = 0, то после первой строки ничего выводить не нужно.

Ограничения

  • 1 <= n <= 10^4
  • 1970 <= year <= 2100
  • запрашиваемая дата находится в диапазоне от 1970-01-01 до 2100-12-31
  • все даты во входных данных корректны
  • длина title от 1 до 40 символов

Примеры

Пример 1

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

3
ONCE 2024-02-29 leap day once
DAILY 2024-02-28 every day after leap eve
WEEKLY 2024-02-15 every thursday sample
2024-02-29

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

3
leap day once
every day after leap eve
every thursday sample
Пример 2

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

4
ONCE 1970-01-01 epoch start
DAILY 1970-01-02 second day onward
WEEKLY 1970-01-08 exact weekly hit
WEEKLY 1970-01-09 weekly miss
1970-01-08

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

2
second day onward
exact weekly hit

Комментарии

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