Q: Таймер-2 (ООШ, 2002)

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

Первая строка входных данных содержит текущее время в формате HH:MM:SS (с ведущими нулями). При этом оно удовлетворяет ограничениям: HH — от 00 до 23, MM и SS — от 00 до 59.

Вторая строка входных данных содержит интервал времени, который должен быть измерен. Интервал записывается в формате H:M:S (где H, M и S — от 0 до 109, без ведущих нулей). При этом если H=0 (или H=0 и M=0), то они могут быть опущены. Например, 100:60 может быть записано и как 101:0, 1:41:0, 0:100:60, 0:101:0 и т.д. Запись 42 — это то же самое, что 0:0:42, а 100:100:100 то же самое, что 101:41:40.

Выведите в формате HH:MM:SS время, во сколько прозвучит звуковой сигнал. При этом если сигнал прозвучит не в текущие сутки, то дальше должна следовать запись +<кол во> days. Например, если сигнал прозвучит на следующий день – то +1 days.

01:01:01
48:0:0
01:01:01+2 days
01:01:01
58:119
02:01:00
23:59:59
1
00:00:00+1 days
IDE

R: Кассы (МОШ 7-9, 2007)

На одном из московских вокзалов билеты продают N касс. Каждая касса работает без перерыва определенный промежуток времени по фиксированному расписанию (одному и тому же каждый день). Требуется определить, на протяжении какого времени в течение суток работают все кассы одновременно.

Программа получает на вход целое число N (0<N≤1000).

В каждой из следующих N строк записано время начало и время окончания работы кассы в формате HH:MM через пробел.

Время открытия означает, что в соответствующую ему минуту касса уже работает, а время закрытия что в соответствующую минуту касса уже не работает. Например, касса, открытая с 10:30 18:30 ежесуточно работает 480 минут.

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

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

3
01:00 23:00
12:00 12:00
22:00 02:00
120
2
09:30 14:00
14:15 21:00
0
2
14:00 18:00
10:00 14:01
1
IDE

S: Самый старший (ЕГЭ, С4)

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

На вход программе в первой строке подается количество людей в списке N. В каждой из последующих N строк находится информация в следующем формате:

<Фамилия> <Имя> <Дата рождения>

где <Фамилия> – строка, состоящая не более, чем из 20 символов без пробелов, <Имя> – строка, состоящая не более, чем из 20 символов без пробелов, <Дата рождения> – строка, имеющая вид DD.MM.YYYY.

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

3
Ivan Petrov 01.05.1995
Petr Sergeev 29.04.1995
Sergey Ivanov 01.01.1996
29.04.1995 Petr Sergeev
3
Ivan Petrov 01.05.1995
Petr Sergeev 29.05.1995
Sergey Ivanov 01.05.1995
01.05.1995 2
IDE

T: Дни рождения (ЕГЭ, С4)

Имеется список сотрудников организации с указанием их фамилии, имени и даты рождения. Администрация ежедневно поздравляет всех сотрудников, родившихся в этот день. Напишите эффективную по времени работы и по используемой памяти программу, которая будет определять, в какой из дней года родилось больше всего сотрудников и выводить этот день (или несколько дней).

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

5
Ivan Petrov 01.05.1995
Petr Sergeev 29.04.1995
Sergey Romanov 01.01.1996
Roman Grigoriev 01.01.1995
Grigoriy Ivanov 01.05.1995
01.01
01.05
IDE

U: Ближайшие дни рождения (ЕГЭ, С4)

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

На вход программе в первой сроке подается текущая дата, заданная в формате DD.MM.YYYY.

Во второй строке подается количество людей в списке N. В каждой из последующих N строк находится информация о каждом сотруднике, как в задаче T.

Известно, что у всех сотрудников даты рождения различаются. Программа должна вывести фамилию и имя самого молодого сотрудника, празднующего день рождения в ближайшие 7 дней или сообщение No birthdays in next week, если никто из сотрудников не празднует день рождения в ближайшие 7 дней.

25.11.2010
3
Ivan Petrov 01.12.1994
Petr Sergeev 25.11.1994
Sergey Romanov 02.12.1994
Ivan Petrov
25.11.2010
1
Sergey Romanov 02.12.1994
No birthdays in next week
IDE

V: Пятница, 13-е

Докажите, что 13-е число месяца чаще всего приходится на пятницу.
Напишите программу, которая выводит на экран 7 чисел: вероятности выпадения 13 числа каждого месяца на понедельник, вторник, среду, четверг, пятницу, субботу, воскресенье. Например, если бы данные вероятности были бы равны, то программа должна вывести следущий текст:

0.142857
0.142857
0.142857
0.142857
0.142857
0.142857
0.142857
IDE

W: Кассы — 2

Решите задачу про кассы в следующих ограничениях: число касс до 10000, время задано с точностью до секунд в формате HH:MM:SS. Требуется определить, на протяжении какого времени (в секундах) в течение суток работают все кассы одновременно.

3
01:00:00 23:00:00
12:00:00 12:00:00
22:00:00 02:00:00
7200
2
09:30:00 14:00:00
14:15:00 21:00:00
0
2
14:00:00 18:00:00
10:00:00 14:00:01
1
IDE

X: Игра с датами

Играет два человека. Задается какая-то дата високосного года. Каждый игрок на своем ходу называет более позднюю дату, увеличивая на 1 или на 2 либо день в месяце, либо месяц, но не то и другое сразу. При этом результат должен оставаться корректной датой. Игрок, назвавший 31 декабря, проигрывает. Кто выигрывает при правильной игре: первый или второй.

Программа получает на вход дату в формате DD.MM и должна вывести одно число: номер выигрывающего игрока.

30.12
2
29.12
1
29.11
2
IDE

Z: Выходные дни

Для каждого данного года посчитайте количество выходных дней в этом году (то есть количество суббот и воскресений).

Программа получает на вход число \(N\) (\(1\le N\le 10^6\)). В каждой из следующих \(N\) строк записано по одному числу от 2000 до \(10^9\) — номера годов.

Для каждого номера года выведите количество выходных дней в соответствующем годе.

Для ускорения ввода-вывода используйте для чтения объект sys.stdin, результат выводите в sys.stdout.

2
2013
2014
104
104
IDE

ZA: Календарь на год (ВКОШП, 2004)

Календарь состоит из блоков, каждый из которых соответствует одному месяцу. Блоки расположены в виде таблицы из k столбцов и 12/k строк (k выбирается делителем числа 12). Месяцы выводятся в следующем порядке: первая строка содержит блоки, соответствующие месяцам с первого по k-ый, следующая – с (k + 1)-го по 2k-ый, и т. д.

Ширина всех блоков в столбце должна быть одинакова, высота всех блоков равна семи (числу дней в неделе). Между блоками различных строк таблицы выводится пустая строка, в каждой строке между соседними блоками из разных столбцов выводится три пробела.

Блок, соответствующий месяцу, устроен следующим образом. Каждой (в том числе неполной) неделе данного месяца в блоке соответствует столбец, имеющий ширину, равную двум. Между двумя соседними столбцами в каждой строке выводится один пробел. Если несколько блоков располагаются в одном столбце календаря, то для выравнивания ширины в те блоки, которые содержат меньше недель, в конец добавляется необходимое число пустых столбцов-недель. При этом разные столбцы календаря могут иметь разную ширину.

Все числа месяца заносятся в блок, соответствующий этому месяцу. Число заносится в строку блока, соответствующую дню недели, на который приходится число в этом месяце. Число заносится в столбец блока, соответствующий неделе, к которой относится данное число. Однозначные числа дополняются слева одним пробелом. Таким образом, числа в столбце оказываются выравнены по правому краю.

 

Программа получает на вход описание года, календарь для которого следует вывести. Оно содержит три числа: \(d\) – день недели, на который приходится первое января (\(1\le d \le 7\)), \(l\); – является ли год високосным (\(l=1\) означает, что год является високосными, \(l=0\) – что не является) и \(k\) – количество столбцов в календаре (\(k\) – одно из чисел 1, 2, 3, 4, 6, 12).

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

4 1 4
    5 12 19 26          2  9 16 23    1  8 15 22 29       5 12 19 26
    6 13 20 27          3 10 17 24    2  9 16 23 30       6 13 20 27
    7 14 21 28          4 11 18 25    3 10 17 24 31       7 14 21 28
 1  8 15 22 29          5 12 19 26    4 11 18 25       1  8 15 22 29
 2  9 16 23 30          6 13 20 27    5 12 19 26       2  9 16 23 30
 3 10 17 24 31          7 14 21 28    6 13 20 27       3 10 17 24
 4 11 18 25          1  8 15 22 29    7 14 21 28       4 11 18 25

    3 10 17 24 31       7 14 21 28       5 12 19 26       2  9 16 23 30
    4 11 18 25       1  8 15 22 29       6 13 20 27       3 10 17 24 31
    5 12 19 26       2  9 16 23 30       7 14 21 28       4 11 18 25
    6 13 20 27       3 10 17 24       1  8 15 22 29       5 12 19 26
    7 14 21 28       4 11 18 25       2  9 16 23 30       6 13 20 27
 1  8 15 22 29       5 12 19 26       3 10 17 24 31       7 14 21 28
 2  9 16 23 30       6 13 20 27       4 11 18 25       1  8 15 22 29

    6 13 20 27          4 11 18 25    1  8 15 22 29       6 13 20 27
    7 14 21 28          5 12 19 26    2  9 16 23 30       7 14 21 28
 1  8 15 22 29          6 13 20 27    3 10 17 24       1  8 15 22 29
 2  9 16 23 30          7 14 21 28    4 11 18 25       2  9 16 23 30
 3 10 17 24          1  8 15 22 29    5 12 19 26       3 10 17 24 31
 4 11 18 25          2  9 16 23 30    6 13 20 27       4 11 18 25
 5 12 19 26          3 10 17 24 31    7 14 21 28       5 12 19 26      
IDE

ZB: Сверим часы (МКО, 9-11, 2005)

В компании MacroHard в последнее время резко участились опоздания сотрудников. Проанализировав ситуацию, руководство решило, что это вызвано большим разбросом в показаниях наручных часов сотрудников. После дополнительного совещания руководящего состава было постановлено, что все сотрудники должны перевести часы на одно и то же время (не важно какое).

Все сотрудники компании носят исключительно электронные часы одного образца. Время на них отображается в формате HH:MM:SS (где HH — часы, MM — минуты, SS — секунды, всегда отображаются в виде двух цифр, 00≤HH≤23, 00≤MM≤59, 00≤SS≤59). Перевод часов осуществляется с помощью двух кнопок. Первая кнопка меняет поле редактирования следующим образом: после первого нажатия часы переходят из режима отображения времени в режим редактирования поля HH, после второго — в режим редактирования поля MM, после третьего — в режим редактирования поля SS, а после четвертого возвращаются в режим отображения времени и т.д. по циклу. Каждое нажатие второй кнопки приводит к увеличению редактируемого поля на единицу (в режиме отображения времени ничего не происходит). При переполнении секунд поле SS обнуляется, а MM увеличивается на единицу, при переполнении минут поле MM обнуляется, а HH увеличивается на единицу, а при переполнении часов просто обнуляется поле HH.

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

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

Входные данные Первая строка входных данных содержит натуральное число N (1≤N≤200) — количество сотрудников компании. Последующие N строк содержат показания часов каждого из сотрудников в формате "HH:MM:SS".

Выходные данные Выведите одно число — минимальное суммарное количество нажатий.

2
08:01:01
07:59:00
7
IDE

ZC: Праздники (МОШ, 10-11, 2005)

Нерабочими называются выходные, а также праздники: 23 февраля, 8 марта и K первых дней года. Праздник попавшие на выходные, переносятся. По заданному K требуется определить максимальное количество подряд идущих нерабочих дней. Парламент некоторой страны принял новый закон о праздничных днях. Согласно этому закону первые K дней года, а также 23 февраля (День 2-го тура олимпиады по информатике) и 8 марта объявляются праздничными, а все остальные праздники отменяются. При этом все выходные (суббота и воскресенье), попавшие на праздничные дни, переносятся на следующие за этими праздниками рабочие дни.

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

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

Входные данные Во входном файле записано единственное число K (1≤K≤50).

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

2
4
10
16
IDE

ZD: Электронная очередь (МКО, 9-11, А, 2009)

В кассовом зале вокзала внедрили систему «электронная очередь». Теперь пассажир, который хочет купить билеты, при входе в зал получает талончик, после чего ожидает, когда подойдет очередь, и его пригласят к освободившейся кассе.

Система «электронная очередь» работает следующим образом. В зале имеются N касс, которые работают все время, за исключением времени перерывов (время перерывов в каждой кассе свое). Пассажиры приглашаются к кассам строго в порядке получения ими талончиков. Каждый пассажир проводит у кассы 5 минут (которые уходят на выбор поезда и оплату заказа), плюс оформление каждого билета дополнительно занимает еще одну минуту (таким образом, если пассажир, например, хочет оформить 3 билета, то он проведет у кассы 8 минут). Если пассажир был приглашен к кассе в момент времени A, а оформление его займет K минут, то и он, и эта касса освободятся к моменту времени A+K+1.

В освободившуюся кассу направляется очередной покупатель, если только в этой кассе не должно быть перерыва в ближайшие 5 минут. Но если касса начала оформление заказа какого-то пассажира, то она завершает оформление этого заказа, даже если в ней в процессе оформления должен начаться перерыв. При этом перерыв не сдвигается (то есть начинается на некоторое время позднее, но заканчивается ровно во столько, во сколько и должен). Считается, что если перерыв в кассе с момента A до момента B, то касса, освобождаясь в момент (A–5) начинает обслуживание очередного покупателя, а освобождаясь в моменты (A–4), (A–3), и так далее, — не начинает, а первого покупателя после перерыва касса начнет обслуживать в момент (B+1).

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

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

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

Входные данные Сначала вводятся количество касс N и и количество пассажиров M (1 ≤ N ≤ 30, 1 ≤ M ≤ 10000). Далее идет описание перерывов каждой кассы: оно начинается с числа Ck (1 ≤ k ≤ N) — количество перерывов у данной кассы (0 ≤ Ck ≤ 5), а далее идут Ck пар чисел, задающих время начала перерыва и его длительность. Перерывы каждой кассы перечислены в порядке наступления.

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

Все времена и длительности — натуральные числа, не превышающие 100000.

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

1 2
1
10 15
1 1
2 2
1 7
1 32
Имеется единственная касса с перерывом с 10-ю по 24-ю минуты. Первый пассажир будет сразу обслужен, его оформление закончится в 7 минут. За это время придет второй пассажир, однако до перерыва единственной кассы останется 3 минуты, поэтому она не будет никого принимать до его окончания. Второй пассажир будет принят только на 25 минуте и освободится в 32.
2 7
2
10 15
305 15
1
5 15
1 1
2 2
100 3
101 1
300 1
301 1
302 1
1 7
2 27
1 108
2 107
1 306
2 307
2 313
Первый пассажир сразу пойдет в первую кассу, она оформит его к 7-й минуте и не будет никого принимать до 25-й минуты в связи с перерывом. По той же причине вторая касса не сможет никого принять до окончания ее перерыва. На 20-й минуте к ней поступит второй пассажир. К 100-й минуте обе кассы будут свободны, поэтому пришедших в 100-ю и 101-ю минуты сразу пригласят к кассам (третьего – к минимальной по номеру свободной). На 300-й минуте пятый пассажир начнет оформляться в первой кассе, после чего она сразу закроется на перерыв до 320-й минуты. Шестому и седьмому пассажиру не остается ничего, кроме как обращаться во вторую кассу.
IDE

ZE: Электричка на Москву (ООШ, 2009)

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

Помогите Васе определить, сколько ему придется ждать ближайшую электричку.

Входные данные Сначала вводятся два числа, задающих часы и минуты прихода Васи на станцию.

Далее идет число N — количество конечных станций, от которых отправляются электрички, проходящие через Васину станцию (1≤N≤100).

Далее идет N блоков данных (по одному блоку для каждой станции). Сначала записано время Ti следования электрички от станции ее отправления до станции, где находится Вася. Время задается в минутах и выражается целым неотрицательным числом, не превышающим 1440.

Далее идет число Mi, определяющее количество электричек в сутки, отправляющихся от этой станции (1≤Mi≤100). Далее идет Mi пар чисел, задающих времена отправления электричек от этой станции. Все времена указаны в возрастающем порядке.

Часы находятся в интервале от 0 до 23, минуты – от 0 до 59.

Считается, что все электропоезда ходят ежедневно. Т.е., например, если у нас только один пункт и только одна электричка, и с этого пункта она отправляется в 23.59 и идет до Васиной станции 61 минуту, то в 01.00 Вася может на ней уехать в тот день, когда он пришел на станцию (если он пришел не позднее 01.00), или на следующий день, если он придет позднее.

Гарантируется, что хотя бы одна электричка в сутки через Васину станцию проходит.

Выходные данные Выведите одно число — время в минутах, которое Васе придется ждать ближайшую электричку. Считается, что если Вася и электричка приходят на станцию одновременно, то Вася успевает на эту электричку и время ожидания 0.

15 57
2
5
2
15 50
19 30
30
1
15 43
16
18 0
1
0
1
15 0
1260
18 0
2
0
1
18 0
10
1
17 50
0
IDE

ZF: Перевод времени (КЧСпб, 2005)

Как известно, с целью экономии электроэнергии многие страны используют переход на так называемое летнее время. Перевод времени осуществляется два раза в год – весной и осенью. Весной осуществляется переход на летнее время: часы переводятся на один час вперед. Осенью летнее время отменяется и часы переводятся на один час назад.

Перевод времени осуществляется ночью. При переходе на летнее время через минуту после 01:59 сразу наступает 03:00. При отмене летнего времени час с 02:00 по 02:59 повторяется два раза. А именно, в день перевода, когда первый раз после 02:59 должно стать 03:00, вместо этого снова становится 02:00.

Как одному из разработчиков новой операционной системы «Mocrosoft Widows 2006», вам поручено написать фрагмент ядра операционной системы, который будет осуществлять автоматический перевод системных часов на летнее время и обратно.

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

Входные данные Первая строка входного файла содержит целое число m – количество минут, которое прошло от начала текущих суток, до первого момента времени, который следует вывести. Гарантируется, что оно неотрицательно и строго меньше числа минут в текущих сутках.

На второй строке находятся два целых числа d1 и d2, которые указывают, какой перевод времени осуществляется в текущие и в следующие сутки. Значение 1 означает, что осуществляется переход на летнее время, -1 означает, что осуществляется отмена летнего времени, а 0 означает, что перевода времени не осуществляется.

На третьей строке записано число k – количество отсчетов времени, которое ваша программа должна вывести (1 ≤ k ≤ 600).

Выходные данные Выходной файл должен состоять из k строк, i-я из которых должна содержать показания часов через (i-1) минут после начального момента времени. Выводите время в формате «hh:mm».

118
1 0
4
01:58
01:59
03:00
03:01
190
-1 0
1
02:10
0
-1 0
3
00:00
00:01
00:02
1438
0 1
4
23:58
23:59
00:00
00:01
IDE