Задача A. Скобки

Автор:XIII командный чемпионат школьников Санкт-Петербурга по программированию
Входной файл: brackets.in   Ограничение времени:2 сек
Выходной файл: brackets.out   Ограничение памяти:32 Мб

Условие

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

Примеры правильных скобочных последовательностей — «», "()", "((()))", "()()()", "((()())())(())". Неформально говоря, правильная скобочная последовательность — это последовательность скобок, которая может быть получена из некоторого арифметического выражения удалением из него всего, кроме скобок.

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

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

Например, из строки [)())(]()] можно получить правильную скобочную последовательность (()())()().

Формат входного файла

Входной файл содержит одну строку, состоящую только из круглых и квадратных скобок.

Формат выходного файла

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

Ограничения

Длина строки не превышает 2000 символов.

Примеры тестов

Входной файл (brackets.in) Выходной файл (brackets.out)
1
[)())(]()]
(()())()()
2
[]
3
[)(][]
()()
4
())
Impossible

Задача C. N-угольники

Автор:XIII командный чемпионат школьников Санкт-Петербурга по программированию
Входной файл: ngon.in   Ограничение времени:2 сек
Выходной файл: ngon.out   Ограничение памяти:32 Мб

Условие

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

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

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

Формат входного файла

Входной файл содержит два целых числа: n — количество вершин в запрещенных многоугольниках и k — максимальную длину отрезков.

Формат выходного файла

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

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

Ограничения

3 ≤ n ≤ 10, 1 ≤ k ≤ 108.

Примеры тестов

Входной файл (ngon.in) Выходной файл (ngon.out)
1
3 7
5
1 1 2 3 5

Задача D. Нефть

Автор:XIII командный чемпионат школьников Санкт-Петербурга по программированию
Входной файл: oil.in   Ограничение времени:2 сек
Выходной файл: oil.out   Ограничение памяти:32 Мб

Условие

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

Исследование внешнего рынка показало, что в мире есть n стран, экспортирующих нефть. При этом i-е государство продает баррель нефти либо за ai долларов, либо за bi евро.

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

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

Формат входного файла

На первой строке входного файла записаны три целых числа: n, a и b. В последующих n cтроках содержатся пары чисел ai, bi.

Формат выходного файла

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

Ограничения

1 ≤ n ≤ 100, 0 ≤ a, b ≤ 1000, 1 ≤ ai, bi ≤ 1000

Примеры тестов

Входной файл (oil.in) Выходной файл (oil.out)
1
3 2 5
6 4
3 5
8 7
1.92
2
4 3 2
1 1
2 2
3 3
4 4
4.00

Задача G. Головоломка

Автор:XIII командный чемпионат школьников Санкт-Петербурга по программированию
Входной файл: puzzle.in   Ограничение времени:2 сек
Выходной файл: puzzle.out   Ограничение памяти:32 Мб

Условие

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

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

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

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

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

Формат входного файла

Первая строка входного файла содержит число k — количество карт. Затем следуют k блоков, которые описывают карты. Первая строка каждого блока содержит два целых числа ni и mi, они задают количество позиций и количество отрезков на i-й карте, соответственно. Будем считать, что позиции пронумерованы числами от 1 до ni, причем начальная позиция имеет номер 1, а конечная — номер ni. В следующих mi строках находятся пары номеров позиций, соединенных соответствующим отрезком.

Формат выходного файла

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

Ограничения

1 ≤ k ≤ 10, 2 ≤ ni ≤ 50, 1 ≤ mi ≤ 1500

Примеры тестов

Входной файл (puzzle.in) Выходной файл (puzzle.out)
1
2
5 4
1 2
2 3
3 4
3 5
3 3
1 2
2 3
3 1
3

Задача H. Экспериментатор

Автор:XIII командный чемпионат школьников Санкт-Петербурга по программированию
Входной файл: tester.in   Ограничение времени:2 сек
Выходной файл: tester.out   Ограничение памяти:32 Мб

Условие

На старости лет один профессор загорелся идеей исследования на прочность транзисторов "КД521(2)". К сожалению, ему не удалось привлечь на помощь никого из коллег, поэтому проводить измерения придется самостоятельно. Но это не пугает профессора.

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

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

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

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

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

Изначально профессор находится на первом этаже, и у него имеется m транзисторов. В доме, в котором живет профессор, n этажей.

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

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

Во втором примере ничего бросать не надо, результат исследования — 2.

Формат входного файла

Во входном файле заданы два целых числа — высота дома n и количество транзисторов m.

Формат выходного файла

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

Ограничения

2 ≤ n ≤ 50, 1 ≤ m ≤ 10

Примеры тестов

Входной файл (tester.in) Выходной файл (tester.out)
1
5 2
3
2
2 2
0

Задача I. Перевод времени

Автор:XIII командный чемпионат школьников Санкт-Петербурга по программированию
Входной файл: time.in   Ограничение времени:2 сек
Выходной файл: time.out   Ограничение памяти:32 Мб

Условие

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

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

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

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

Формат входного файла

Первая строка входного файла содержит целое число m — количество минут, которое прошло от начала текущих суток, до первого момента времени, который следует вывести. Гарантируется, что оно неотрицательно и строго меньше числа минут в текущих сутках. На второй строке находятся два целых числа d1 и d2, которые указывают, какой перевод времени осуществляется в текущие и в следующие сутки. Значение 1 означает, что осуществляется переход на летнее время, 1 означает, что осуществляется отмена летнего времени, а 0 означает, что перевода времени не осуществляется. На третьей строке записано число k — количество отсчетов времени, которое ваша программа должна вывести.

Формат выходного файла

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

Ограничения

1 ≤ k ≤ 600

Примеры тестов

Входной файл (time.in) Выходной файл (time.out)
1
118
1 0
4
01:58
01:59
03:00
03:01
2
190
-1 1
1
02:10
3
0
-1 0
3
00:00
00:01
00:02
4
1438
0 1
4
23:58
23:59
00:00
00:01

0.085s 0.006s 17