printРабочее место участника

printЗадачи

1581. Вирус 10.10.10

Ограничения: время – 1s/2s, память – 128MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

В преддверии очередной «красивой» даты – 10 октября 2010 года – суеверные пользователи Интернета были встревожены слухами о предстоящих сбоях в работе компьютеров. Особенный вирус, который получил условное название «три десятки» (по записи круглой даты 10.10.10) вызвал активное обсуждение на сайтах и в социальных сетях.
Напомним, что дата записывается в виде число.месяц.год. Существует несколько способов записи даты в данном формате: число и месяц могут быть записаны с лидирующим нулём (если значение не превышает 9), год может быть записан либо полностью, либо в виде последних двух цифр. Например, дата 2 марта 2004 года может быть записана как 02.03.2004, 2.03.04, 02.3.2004 и т.д.
Опасения, связанные с появлением вирусов к определённым круглым датам, возникают весьма часто, поэтому возникла необходимость расчёта ближайшей «красивой» даты для заданной даты.
Будем считать дату «красивой», если найдётся такой способ записи даты, что после удаления разделяющих точек, получившаяся строка удовлетворяет хотя бы одному из следующих условий:
  • строка является палиндромом, т.е. одинакова при чтении слева направо и справа налево, например 7 февраля 2070 – 07.02.2070 или 5 декабря 1915 – 5.12.15
  • строка разбивается на подстроки равной длины, равные между собой, например 31 июля 3107 – 31.07.3107 или 9 августа 2898 – 9.8.98 в случае разбиения на две подстроки, 5 июля 5757 – 5.7.5757 в случае разбиения на три подстроки
Требуется написать программу, которая по указанной дате определит ближайшую следующую за ней (включая её саму) «красивую» дату.
Примечание: количество дней в месяцах равно 31, 28 или 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31. Год является високосным, если его номер кратен 4 и при этом не кратен 100 либо кратен 400.
Входной файл содержит три целых числа – `D_C` `M_C` `Y_C` (`1\ ≤\ D_C\ ≤\ 31`, `1\ ≤\ M_C\ ≤\ 12`, `1600\ ≤\ Y_C\ ≤\ 9999`), обозначающих дату, где `D_C` – день, `M_C` – месяц, `Y_C` – год. Входная дата корректна, т.е. день месяца не превышает количество дней в данном месяце данного года.
Выходной файл должен содержать три целых числа – `D_V` `M_V` `Y_V`, задающих ближайшую "красивую" дату, где `D_V` – день, `M_V` – месяц, `Y_V` – год.

Пример ввода 1

10 10 2010

Пример вывода 1

10 10 2010

Пример ввода 2

29 10 2010

Пример вывода 2

1 11 2010

Пример ввода 3

8 4 6579

Пример вывода 3

9 7 6579
Источник: http://imcs.dvgu.ru/cats/ Школьники ACM, 2010
loading