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

Автор:Жюри зимних сборов 2009   Ограничение времени:1 сек
Входной файл:brackets.in   Ограничение памяти:256 Мб
Выходной файл:brackets.out  
Максимальный балл:100  

Условие

Юная программистка Агнесса недавно узнала на уроке информатики об арифметических выражениях. Она заинтересовалась вопросом, что случится, если из арифметического выражения удалить всё, кроме скобок. Введя запрос в своём любимом поисковике, она выяснила, что математики называют последовательности скобок, которые могли бы встречаться в некотором арифметическом выражении, правильными скобочными последовательностями.

Так, последовательность ()(()) является правильной скобочной последовательностью, потому что она может, например, встречаться в выражении (2+2):(3–(5–2)+4), а последовательности (() и ())( не являются таковыми. Легко видеть, что существует пять правильных скобочных последовательностей, состоящих ровно из шести скобок (по три скобки каждого типа — открывающих и закрывающих): ((())), (()()), (())(), ()(()) и ()()().

Агнесса заинтересовалась простейшими преобразованиями правильных скобочных последовательностей. Для начала Агнесса решила ограничиться добавлением скобок в последовательность. Она очень быстро выяснила, что после добавления одной скобки последовательность перестаёт быть правильной, а вот добавление двух скобок иногда сохраняет свойство правильности. Например, при добавлении двух скобок в различные места последовательности ()() можно получить последовательности (()()), (())(), ()(()) и ()()(). Легко видеть, что при любом способе добавления двух скобок с сохранением свойства правильности одна из новых скобок должна быть открывающей, а другая — закрывающей.

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

Таким образом, если в полученной последовательности добавленная открывающая скобка стоит в позиции i, а добавленная закрывающая — в позиции j, то два способа, соответствующие парам (i 1, j 1) и (i 2, j 2), считаются различными, если i 1 ≠ i 2 или j 1 ≠ j 2.

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

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

Подзадача 1 (40 баллов): Величина n (количество скобок каждого типа) не превосходит 50.

Подзадача 2 (30 баллов): Величина n (количество скобок каждого типа) не превосходит 2500.

Подзадача 3 (30 баллов): Величина n (количество скобок каждого типа) не превосходит 50 000.

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

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

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

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

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

Входной файл (brackets.in) Выходной файл (brackets.out)
1
()
7
2
()()
17
3
(())
21

Задача B. Школа олимпийского резерва

Автор:Жюри ROI-2011   Ограничение времени:2 сек
Входной файл:school.in   Ограничение памяти:256 Мб
Выходной файл:school.out  
Максимальный балл:100  

Условие

Внимание! Используется лишь часть тестов из оригинального набора!

Для подготовки к чемпионату мира по футболу 2018 года создается школа олимпийского резерва. В нее нужно зачислить M юношей 1994-1996 годов рождения. По результатам тестирования каждому из N претендентов был выставлен определенный балл, характеризующий его мастерство. Все претенденты набрали различные баллы. В составе школы олимпийского резерва хотелось бы иметь A учащихся 1994 г.р., B – 1995 г.р. и C – 1996 г.р. (A + B + C = M). При этом минимальный балл зачисленного юноши 1994 г.р. должен быть больше, чем минимальный балл зачисленного 1995 г.р., а минимальный балл зачисленного 1995 г.р. должен быть больше, чем минимальный балл зачисленного 1996 г.р. Все претенденты, набравшие балл больше минимального балла для юношей своего года рождения, также должны быть зачислены.

В базе данных для каждого претендента записаны год его рождения и тестовый балл. Требуется определить, сколько нужно зачислить юношей каждого года рождения M94, M95 и M96 (M94 + M95 + M96 = M), чтобы значение величины F = |M94 − A| + |M95 − B| + |M96 − C| было минимально, все правила, касающиеся минимальных баллов зачисленных, были соблюдены, и должен быть зачислен хотя бы один юноша каждого требуемого года рождения.

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

Во втором примере правильным является также ответ 2 2 2 2.

Подзадача 1 (25 баллов): K = 1; N ≤ 100; каждый претендент характеризуется своим баллом от 1 до N.

Подзадача 2 (25 баллов): Сумма значений N по всем тестовым наборам не превосходит 10 000, каждый претендент характеризуется своим баллом от 1 до 109.

Подзадача 3 (25 баллов): Сумма значений N по всем тестовым наборам не превосходит 100 000, каждый претендент характеризуется своим баллом от 1 до N.

Подзадача 4 (25 баллов): Сумма значений N по всем тестовым наборам не превосходит 300 000, каждый претендент характеризуется своим баллом в диапазоне от 1 до 109.

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

В первой строке входного файла находится число K – количество наборов входных данных. Далее следуют описания каждого из наборов. В начале каждого набора расположены три натуральных числа A, B, C. Во второй строке описания находится число N – количество претендентов (гарантируется, что N ≥ A + B + C). В каждой из следующих N строк набора содержатся два натуральных числа – год рождения (число 1994, 1995 или 1996 соответственно) и тестовый балл очередного претендента.

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

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

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

Входной файл (school.in) Выходной файл (school.out)
1
3
1 1 1
4
1994 3
1994 4
1996 1
1996 2
1 1 1
3
1995 2
1994 3
1996 1
1 1 1
3
1994 1
1995 2
1996 3
-1
0 1 1 1
-1
2
1
2 3 1
7
1996 2
1994 7
1994 4
1996 1
1995 3
1994 5
1995 6
2 3 2 1

Задача C. Снова в космос

Автор:Жюри ROI-2011   Ограничение времени:2 сек
Входной файл:shuttle.in   Ограничение памяти:64 Мб
Выходной файл:shuttle.out  
Максимальный балл:100  

Условие

К 50-летию первого пилотируемого полета в космос решено создать новый тип космического корабля многоразового использования “Восторг”. Прямоугольная часть его корпуса (далее прямоугольник) должна быть облицована квадратными термозащитными плитками разных цветов одного и того же размера. Прямоугольник состоит из r рядов по c плиток в каждом. Плитки должны образовывать заданный рисунок.

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

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

Требуется написать программу, которая по заданному расположению плиток в прямоугольнике рассчитывает размеры минимальной по площади панели, которую можно использовать при его облицовке, а также величину сдвига вправо (0 ≤ s < b) каждого следующего ряда относительно предыдущего.

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

Первая строка входного файла содержит два целых числа: r и c – размеры прямоугольника в плитках. В последующих r строках указаны цвета плиток фрагмента. Каждый из k ≤ 26 цветов обозначен одной из первых k прописных букв латинского алфавита. Гарантируется, что для этого прямоугольника можно подобрать панель размера a × b, такую, что 2 a ≤ r и 2 b ≤ c.

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

В выходной файл необходимо вывести три целых числа a, b и s, удовлетворяющих условиям задачи. Если решений несколько, разрешается вывести любое из них.

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

Входной файл (shuttle.in) Выходной файл (shuttle.out)
1
2 4
ABAB
ABAB
1 2 0
2
5 7
DCADCAD
BABBABB
ADCADCA
BBABBAB
CADCADC
2 3 1

Задача D. Почта

Автор:Жюри ROI-2011   Ограничение времени:5 сек
Входной файл:post.in   Ограничение памяти:256 Мб
Выходной файл:post.out  
Максимальный балл:100  

Условие

Внимание! Используется лишь часть тестов из оригинального набора!

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

IT-отдел городской почты разработал кольцевой маршрут, проходящий через все почтовые отделения. Все улицы в городе P с односторонним движением. Необходимо выбрать почтовое отделение для размещения логистического центра, куда будет поступать вся городская корреспонденция перед её отправкой на Е-мобиле по маршруту. Из-за пробок скорость движения на участках маршрута между почтовыми отделениями зависит от времени суток. Размещение логистического центра считается оптимальным, если после отъезда из него в нулевой момент времени Е-мобиль развезёт корреспонденцию и возвратится в логистический центр как можно раньше. Время разгрузки корреспонденции пренебрежимо мало.

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

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

В первой строке задаётся целое положительное число N — количество почтовых отделений в городе P. Почтовые отделения нумеруются в порядке их следования по маршруту, начиная с единицы.

В следующих строках описаны N участков маршрута между почтовыми отделениями. Каждое описание содержит три строки:

Все числа в строках разделяются одним пробелом.

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

В единственной строке необходимо вывести номер почтового отделения, в котором нужно разместить логистический центр, а также время проезда Е-мобиля по маршруту. Ответ должен иметь абсолютную или относительную погрешность не более 109, что означает следующее. Пусть максимальное расстояние от выведенной точки до некоторой трассы равно x, а в правильном ответе оно равно y. Ответ будет засчитан, если значение выражения |x − y| / max(1, |y|); не превышает 109.

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

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

2
2 1

2
1 2.000000

Задача E. Парк аттракционов

Автор:Жюри ROI-2011   Ограничение времени:2 сек
Входной файл:attract.in   Ограничение памяти:256 Мб
Выходной файл:attract.out  
Максимальный балл:100  

Условие

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

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

Время перемещения участников между автоматами, а также между автобусом и павильоном считается равным нулю. Каждый из участников в любой момент времени может как играть на автомате, так и ждать своей очереди, например, гуляя по парку. Для каждого из M (M ≤ N) автоматов известно время игры на нём ti (1 ≤ i ≤ M). Прервать начатую игру на автомате невозможно. Автобус привозит всех участников олимпиады в парк одновременно в нулевой момент времени.

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

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

В первой строке входного файла содержатся два числа: N и M (1 ≤ M ≤ N ≤ 100). Во второй строке заданы M целых чисел ti (1 ≤ ti ≤ 100), каждое из которых задаёт время игры на i-м автомате (1 ≤ i ≤ M). Числа в строке разделяются одиночными пробелами.

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

В первой строке необходимо вывести одно число — минимально возможное время отправления автобуса из парка аттракционов. Далее необходимо вывести N расписаний игр на автоматах, по одному для каждого из участников. Каждое расписание описывается в (M + 1) строках, первая из которых — пустая, а далее следуют M строк, описывающих автоматы в порядке их посещения этим участником. Посещение автомата описывается двумя целыми числами: номером автомата j (1 ≤ j ≤ M) и временем начала игры участника на этом автомате.

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

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

1 0

1 2
2
3 2
2 1
6

1 0
2 2

1 2
2 4

2 0
1 4

Задача F. Велогонка

Автор:Жюри ROI-2011   Ограничение времени:2 сек
Входной файл:bicycle.in   Ограничение памяти:256 Мб
Выходной файл:bicycle.out  
Максимальный балл:100  

Условие

Велосипедисты, участвующие в шоссейной гонке, в некоторый момент времени, который называется начальным, оказались в точках, удалённых от места старта на x1, x2, …, xn метров (n – общее количество велосипедистов). Каждый велосипедист двигается со своей постоянной скоростью v1, v2, …, vn метров в секунду. Все велосипедисты двигаются в одну и ту же сторону.

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

Требуется написать программу, которая по заданному количеству велосипедистов n, заданным начальным положениям велосипедистов x1, x2, …, xn и их скоростям v1, v2, …, vn, вычислит момент времени t, в который расстояние l между лидирующим и замыкающим велосипедистом будет минимальным.

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

Первая строка входного файла содержит целое число n – количество велосипедистов.

В последующих n строках указаны по два целых числа: xi – расстояние от старта до i-го велосипедиста в начальный момент времени (0 ≤ xi ≤ 107) и vi – его скорость (0 ≤ vi ≤ 107).

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

В выходной файл необходимо вывести два вещественных числа: t – время в секундах, прошедшее от начального момента времени до момента, когда расстояние в метрах между лидером и замыкающим будет минимальным, l – искомое расстояние.

Числа t и l должны иметь абсолютную или относительную погрешность не более 106, что означает следующее. Пусть выведенное число равно x, а в правильном ответе оно равно y. Ответ будет считаться правильным, если значение выражения |x − y| / max(1, |y|) не превышает 106.

Ограничения

2 ≤ n ≤ 105

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

Входной файл (bicycle.in) Выходной файл (bicycle.out)
1
3
0 40
30 10
40 30
1 30
2
5
90 100
100 70
100 70
110 60
120 35
0.5 5.000000000000

Задача G. Сад пермского периода

Автор:Жюри ROI-2011   Ограничение времени:3 сек
Входной файл:garden.in   Ограничение памяти:256 Мб
Выходной файл:garden.out  
Максимальный балл:100  

Условие

Оранжерея “Сад пермского периода” представляет собой прямоугольный участок для выращивания растений пермского периода. Оранжерея была разбита дорожками на квадраты. В центре каждого квадрата посажено одно растение. Размер квадрата зависит от корневой системы растения.

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

Введем декартову прямоугольную систему координат, начало которой совмещено с левым нижним углом оранжереи. Ось Ox направлена вдоль нижней границы участка, ось Oy – вдоль левой. Изначально дорожки были проложены параллельно осям координат. Единичный отрезок удалось выбрать так, что координаты углов каждого из квадратов оказались целыми.

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

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

В первой строке входного файла записаны три натуральных числа: W – ширина оранжереи, H – длина оранжереи и N – количество посаженых растений. В каждой из следующих N строк расположены по два числа: xi, yi – координаты i-го растения (0 < xi < W, 0 < yi < H). Гарантируется, что соответствующие растениям квадраты имеют целую длину стороны и покрывают всю оранжерею.

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

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

Ограничения

W, H ≤ 1012;

N ≤ 2 × 105;

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

Входной файл (garden.in) Выходной файл (garden.out)
1
4 6 3
1 1
3 1
2 4
2
2
4
2
8 8 10
4.5 7.5
5.5 7.5
2 6
4.5 6.5
7 7
5 5
6 2
7 5
2 2
5.5 6.5
1
1
4
1
2
2
4
2
4
1

0.139s 0.005s 29