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
.
R: Кассы (МОШ 7-9, 2007)
На одном из московских вокзалов билеты продают N касс. Каждая касса работает без перерыва определенный промежуток времени по фиксированному расписанию (одному и тому же каждый день). Требуется определить, на протяжении какого времени в течение суток работают все кассы одновременно.
Программа получает на вход целое число N (0<N≤1000).
В каждой из следующих N строк записано время начало
и время окончания работы кассы в формате HH:MM
через пробел.
Время открытия означает, что в соответствующую ему минуту касса уже работает, а время закрытия что в соответствующую минуту касса уже не работает. Например, касса, открытая с 10:30 18:30 ежесуточно работает 480 минут.
Если время открытия совпадает с временем закрытия, то касса работает круглосуточно. Если первое время больше второго, то касса начинает работу до полуночи, а заканчивает на следующий день.
Требуется вывести одно число суммарное время за сутки (в минутах), на протяжении которого работают все N касс.
S: Самый старший (ЕГЭ, С4)
Имеется список людей с указанием их фамилии, имени и даты рождения. Напишите эффективную по времени работы и по используемой памяти программу, которая будет определять самого старшего человека из этого списка и выводить его фамилию, имя и дату рождения, а если имеется несколько самых старших людей с одинаковой датой рождения, то определять их количество.
На вход программе в первой строке подается количество людей в списке N. В каждой из последующих N строк находится информация в следующем формате:
<Фамилия> <Имя> <Дата рождения>
где <Фамилия>
– строка, состоящая не более, чем из 20 символов без пробелов,
<Имя>
– строка, состоящая не более, чем из 20 символов без пробелов,
<Дата рождения>
– строка, имеющая вид DD.MM.YYYY
.
Программа должна вывести дату рождения самого старшего человека в списке, затем через пробел его фамилию и имя. Если таких людей, несколько, то вместо фамилии и имени выводится их количество.
T: Дни рождения (ЕГЭ, С4)
Имеется список сотрудников организации с указанием их фамилии, имени и даты рождения. Администрация ежедневно поздравляет всех сотрудников, родившихся в этот день. Напишите эффективную по времени работы и по используемой памяти программу, которая будет определять, в какой из дней года родилось больше всего сотрудников и выводить этот день (или несколько дней).
Формат входных данных аналогичен предыдущей задаче.
Программа должна вывести список дат, в которые наибольшее число сотрудников отмечает дни рождения
в формате DD.MM
по возрастанию дат, каждая дата в отдельной строке.
U: Ближайшие дни рождения (ЕГЭ, С4)
Имеется список сотрудников организации с указанием их фамилии, имени и даты рождения. Напишите эффективную по времени работы и по используемой памяти программу, которая будет определять фамилию и имя самого молодого сотрудника, празднующего свой день рождения в течение ближайших семи дней от текущей даты (включая текущую дату).
На вход программе в первой сроке подается текущая дата,
заданная в формате DD.MM.YYYY
.
Во второй строке подается количество людей в списке N. В каждой из последующих N строк находится информация о каждом сотруднике, как в задаче T.
Известно, что у всех сотрудников даты рождения различаются. Программа должна вывести фамилию
и имя самого молодого сотрудника, празднующего день рождения в ближайшие 7 дней
или сообщение No birthdays in next week
, если никто из сотрудников не празднует
день рождения в ближайшие 7 дней.
V: Пятница, 13-е
Докажите, что 13-е число месяца чаще всего приходится на пятницу.
Напишите
программу, которая выводит на экран 7 чисел: вероятности выпадения 13
числа каждого месяца на понедельник, вторник, среду, четверг, пятницу,
субботу, воскресенье. Например, если бы данные вероятности были бы
равны, то программа должна вывести следущий текст:
W: Кассы — 2
Решите задачу про кассы в следующих ограничениях: число касс до 10000, время задано с точностью
до секунд в формате HH:MM:SS
.
Требуется определить, на протяжении какого времени (в секундах) в течение суток работают все кассы одновременно.
X: Игра с датами
Играет два человека. Задается какая-то дата високосного года. Каждый игрок на своем ходу называет более позднюю дату, увеличивая на 1 или на 2 либо день в месяце, либо месяц, но не то и другое сразу. При этом результат должен оставаться корректной датой. Игрок, назвавший 31 декабря, проигрывает. Кто выигрывает при правильной игре: первый или второй.
Программа получает на вход дату в формате DD.MM
и должна вывести
одно число: номер выигрывающего игрока.
Z: Выходные дни
Для каждого данного года посчитайте количество выходных дней в этом году (то есть количество суббот и воскресений).
Программа получает на вход число \(N\) (\(1\le N\le 10^6\)). В каждой из следующих \(N\) строк записано по одному числу от 2000 до \(10^9\) — номера годов.
Для каждого номера года выведите количество выходных дней в соответствующем годе.
Для ускорения ввода-вывода используйте для чтения объект sys.stdin, результат выводите в sys.stdout.
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).
Выведите календарь, отформатированный в соответствии с условием задачи. Проверяющая программа в этой задаче игнорирует пробелы в конце строк. В остальном календарь должен быть отформатирован в точности так, как описано в условии.
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".
Выходные данные Выведите одно число — минимальное суммарное количество нажатий.
ZC: Праздники (МОШ, 10-11, 2005)
Нерабочими называются выходные, а также праздники: 23 февраля, 8 марта и K первых дней года. Праздник попавшие на выходные, переносятся. По заданному K требуется определить максимальное количество подряд идущих нерабочих дней. Парламент некоторой страны принял новый закон о праздничных днях. Согласно этому закону первые K дней года, а также 23 февраля (День 2-го тура олимпиады по информатике) и 8 марта объявляются праздничными, а все остальные праздники отменяются. При этом все выходные (суббота и воскресенье), попавшие на праздничные дни, переносятся на следующие за этими праздниками рабочие дни.
В зависимости от того, на какой день недели приходится 1 января, количество нерабочих дней, которые идут подряд, может меняться.
Требуется определить, какое наибольшее количество нерабочих дней может идти подряд.
Входные данные Во входном файле записано единственное число K (1≤K≤50).
Выходные данные В выходной файл требуется записать единственное число — наибольшее количество нерабочих дней, идущих подряд.
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.
Выходные данные Для каждого пассажира выведите два числа — номер кассы, которая будет его обслуживать, и время, в которое он покинет кассовый зал, купив нужные ему билеты.
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.
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».