2013, VI Самарская областная межвузовская олимпиада по программированию
A. Зелье бессмертия
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

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

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

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

Входные данные

В единственной строке записаны два целых числа через пробел: n и k (1 ≤ n ≤ 2000, 1 ≤ k ≤ n) — количество колб, стоящих на полке у Иннокентия, и количество зелий, которое Иннокентий будет давать попробовать кроликам.

Выходные данные

Если ученому не удастся выяснить, в какой колбе находится зелье бессмертия, выведите «-1». Иначе выведите целое число — минимальное количество кроликов, которые могут погибнуть в худшем случае при отыскании зелья.

Примеры
Входные данные
3 2
Выходные данные
1
Входные данные
4 2
Выходные данные
2
B. Много-много радости
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

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

Определите ожидаемое число раз, которое мальчики радовались в процессе этого занятия.

Входные данные

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

Выходные данные

Выведите единственное вещественное число — ожидаемое количество раз, которое Гена и Петя радовались в процессе своего занятия. Абсолютная или относительная погрешность ответа не должна превышать 10 - 9.

Примеры
Входные данные
abc
Выходные данные
1.000000000000000
Входные данные
zzz
Выходные данные
3.000000000000000
C. Очень просторный офис
ограничение по времени на тест
2 с
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

Программисты компании «Периметр» работают над n проектами. Начальник программистов Шифтмэн прекрасно понимает, насколько важны комфортные условия для продуктивной работы — в компании нет ни дресс-кода, ни фиксированного рабочего графика, зато на кухне всегда есть чай и свежие киви. А когда команда проекта «Диплодок» стала жаловаться на то, что после выхода на работу новых сотрудников в комнате не протолкнуться, Шифтмэн понял — пора искать более просторный офис.

Новое офисное здание нашлось быстро. Оно расположено недалеко от метро, возле уютного парка. Кроме того, в подвале здания много парковочных мест. Узнав, что в новом офисе n больших комнат, Шифтмэн решил выделить по комнате каждому проекту, чтобы сотрудники создали там уникальную для каждого проекта рабочую атмосферу. Менеджер каждого проекта знает, какая комната идеально подойдет для его команды — с одной стороны, комната должна быть не слишком тесной, а с другой — не слишком большой, чтобы сотрудники не боялись того, что к ним могут подселить новый проект. Помогите менеджерам поделить комнаты самим, быстро и без вмешательства начальства.

Входные данные

В первой строке записано целое число n — количество проектов в «Периметре» (1 ≤ n ≤ 100000). Во второй строке записаны n целых чисел — площади всех комнат в новом офисе. В i-ой из следующих n строк записаны два целых числа — минимальная и максимальная площади комнаты, в которой согласна сидеть команда i-ого проекта (естественно, минимальная площадь не превосходит максимальной). Все указанные площади положительные и не превосходят 109.

Выходные данные

Если существует единственный способ рассадить команды по комнатам так, чтобы все команды остались довольны, в первой строке выведите «Perfect!», а во второй строке — перестановку чисел от 1 до n. i-ое число должно обозначать номер комнаты, которую должна занять команда i-ого проекта. Комнаты занумерованы числами от 1 до n в том порядке, в котором они описаны во входных данных.

Если возможных вариантов рассадки несколько, выведите «Ask Shiftman for help.»

Если рассадить команды требуемым образом нельзя, выведите «Let's search for another office.»

Примеры
Входные данные
3
40 50 60
30 70
20 40
60 60
Выходные данные
Perfect!
2 1 3
Входные данные
3
40 50 70
30 70
20 50
60 60
Выходные данные
Let's search for another office.
D. Праздники
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

Все знают, что битва при Эндоре — миф, придуманный Джорджем Лукасом ради раскрутки своего фильма. На самом деле никакой битвы при Эндоре не было, и Первая Галактическая Империя существует в полном здравии и по сей день.

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

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

Входные данные

В единственной строке записано единственное целое число n (1 ≤ n ≤ 200000) — количество рас, населяющих Первую Галактическую Империю.

Выходные данные

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

Примеры
Входные данные
2
Выходные данные
2
Входные данные
3
Выходные данные
12
Входные данные
5
Выходные данные
180
Входные данные
200000
Выходные данные
82096552
E. Два лабиринта
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

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

Константин и Михаил — мировые лидеры по составлению лабиринтов. Они составили каждый по лабиринту размером n × m, и теперь обвиняют друг друга в плагиате. Они считают, что плагиат имел место, если существует путь из левой верхней клетки в правую нижнюю, являющийся кратчайшим в обоих лабиринтах. Разрешите их спор и скажите, имел ли место плагиат.

Входные данные

В первой строке записаны два числа n и m (1 ≤ n, m ≤ 500) — размеры лабиринтов.

В следующих n строках записан лабиринт, составленный Константином. Каждая из этих n строк состоит из m символов. Каждый из этих символов может быть равен либо «#», что обозначает стену, либо «.», что обозначает свободную клетку.

Следующая строка оставлена пустой, а затем в n строках в аналогичном формате записан лабиринт, составленный Михаилом. Гарантируется, что в обоих лабиринтах левая верхняя и правая нижняя клетки — свободные.

Выходные данные

Выведите «YES», если существует путь из левой верхней клетки в правую нижнюю, являющийся кратчайшим в обоих лабиринтах. Иначе выведите «NO».

Примеры
Входные данные
3 5
.....
.#.#.
.....


.....
#.#.#
.....
Выходные данные
NO
Входные данные
3 5
.....
.#.##
.....


.....
##.#.
.....
Выходные данные
YES
F. Конец света
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

Через t единиц времени наступит конец света. В преддверии столь знаменательного события n людей подготовили m убежищ, в которых, как они думают, можно будет спастись. Однако каждое убежище вмещает в себя лишь k человек, а каждый человек за одну единицу времени проходит лишь одну единицу расстояния. К счастью, все люди и убежища находятся сейчас на одной прямой, что уменьшает путаницу и облегчает подсчеты.

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

Входные данные

В первой строке через пробел записаны четыре целых числа n, m, k и t (1 ≤ n, m, k ≤ 200000, 1 ≤ t ≤ 109) — количество людей, количество убежищ, вместимость одного убежища и время, оставшееся до конца света.

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

В третьей строке записаны m целых чисел через пробел — координаты убежищ на прямой.

Все координаты лежат в пределах от  - 109 до 109.

Выходные данные

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

Примеры
Входные данные
2 2 1 5
45 55
40 60
Выходные данные
2
Входные данные
2 2 1 5
45 54
40 60
Выходные данные
1
Входные данные
2 2 2 5
45 35
40 60
Выходные данные
2
Входные данные
3 3 1 5
40 45 45
45 50 50
Выходные данные
3
G. Обработка изображений
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

Андрей в свободное от игр время обрабатывает изображения. Больше всего он любит обрабатывать картинки в градациях серого. Каждый пиксель на картинке в градациях серого имеет яркость, выраженную целым числом от 0 до 109. Чем ближе яркость к нулю, тем темнее этот пиксель; яркость, равная нулю, соответствует черному цвету, а 109 — белому. Андрей называет такие картинки цветными.

В процессе обработки цветной картинки Андрей выбирает целое число t в диапазоне от 0 до 109 и создает новую картинку, состоящую всего из двух цветов: черного и белого (которые он обозначает как 0 и 1). Такие картинки он называет черно-белыми.

Принцип составления черно-белых картинок очень прост: Андрей рассматривает каждый пиксель исходной цветной картинки, и, если яркость этого пикселя строго меньше t, на новой картинке этот пиксель будет черного цвета, иначе — белого.

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

Входные данные

В первой строке через пробел записано три натуральных числа k, n и m (1 ≤ k·n·m ≤ 200000) — количество картинок и их размеры.

Далее следуют k блоков, описывающих черно-белые картинки. Каждый из этих блоков начинается пустой строкой, за которой следует описание картинки: n строк, состоящих из m символов. Символы в строках могут быть равны «0», что обозначает черный цвет, и «1», что соответствует белому цвету.

Выходные данные

Если не существует цветной картинки, из которой могли были бы быть получены все k черно-белых картинок, выведите «IMPOSSIBLE».

Иначе в первых n строках выведите матрицу n × m, каждый элемент которой является целым числом от 0 до 109 и равен яркости соответствующего пикселя на цветной картинке. Числа в строках отделяйте пробелами.

После матрицы в следующей строке выведите k чисел t1, ..., tk (0 ≤ ti ≤ 109), использовавшихся для получения соответствующих черно-белых картинок.

Если существует несколько решений, выведите любое.

Примеры
Входные данные
2 3 3


011
000
110


111
100
111
Выходные данные
2 4 5
2 1 0
4 7 2
4 2
Входные данные
2 3 3


011
000
110


100
101
001
Выходные данные
IMPOSSIBLE
H. Загадочные снимки
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

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

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

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

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

Входные данные

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

Выходные данные

Выведите «YES», если на фотографиях могут быть изображены одни и те же три звезды, и «NO» иначе.

Примеры
Входные данные
0 0
0 2
1 0
0 0
0 4
2 0
Выходные данные
YES
Входные данные
0 0
0 2
1 0
0 0
0 4
3 0
Выходные данные
NO
Входные данные
5 5
7 6
6 3
1 0
0 1
1 1
Выходные данные
YES
I. Производная массива
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

Определим производные массива следующим образом:

  • Нулевой производной массива a1, ..., an называется сам этот массив a1, ..., an.
  • Первой производной массива a1, ..., an, где n > 1, называется массив a'1, ..., a'n - 1, такой, что для всех i = 1,  ...,  n - 1 выполняется равенство a'i = ai + 1 - ai.
  • k-ой производной массива a1, ..., an, где 1 < k < n, называется (k - 1)-ая производная массива a'1, ..., a'n - 1.

Даны n чисел b0, ..., bn - 1, каждое из которых равно либо нулю, либо единице. Постройте массив длины n такой, что его k-я производная строго возрастает, если bk = 1, и строго убывает, если bk = 0. Каждый элемент массива должен быть целым числом от  - 109 до 109. Если это невозможно, выведите «IMPOSSIBLE».

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 2000) — длина массива, который надо построить.

Во второй строке через пробел записаны n целых чисел b0, ..., bn - 1 (0 ≤ bi ≤ 1). Если bk = 1, то k-я производная массива должна строго возрастать, а если bk = 0 — строго убывать.

Выходные данные

Выведите n целых чисел a1, ..., an — массив, производные которого удовлетворяют всем ограничениям, заданными числами b0, ..., bn - 1. Элементы массива не должны превышать по модулю 109.

Если существует несколько таких массивов, выведите любой.

Если же такого массива не существует, или его элементы превышают по модулю 109, выведите «IMPOSSIBLE».

Примеры
Входные данные
3
1 1 1
Выходные данные
1 2 5
Входные данные
3
0 0 1
Выходные данные
-1 -2 -5
J. Перемешивание колоды
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

Ученый с мировым именем Иннокентий продолжает свои инновационные эксперименты с колодами карт. Теперь у него есть колода из n карт и k шаффл-машин для перемешивания этой колоды. Как мы знаем, i-ая шаффл-машина характеризуется своими собственными числами pi, 1pi, 2, ..., pi, n, такими, что если положить в нее n карт, занумерованных по порядку 12...n, и нажать на машине кнопку, то карты будут перемешаны таким образом, что образуется колода pi, 1pi, 2, ..., pi, n, где числа pi, 1pi, 2, ..., pi, n — это те же номера карт, но переставленные в некотором порядке шаффл-машиной.

В начале эксперимента карты в колоде располагаются в порядке a1a2, ..., an, т.е. на первом месте находится карта с номером a1, на втором — карта с номером a2, и т.д. Ученый хочет сделать так, чтобы карта с номером x была на первом месте. Он может использовать все свои шаффл-машины столько раз, сколько ему захочется. Выясните, получится ли у него добиться желаемого результата.

Входные данные

В первой строке записано единственное натуральное число n — количество карт в колоде Иннокентия.

Во второй строке записаны n различных натуральных чисел a1a2, ..., an (1 ≤ ai ≤ n) — первоначальное расположение карт в колоде.

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

В каждой из следующих k строк записаны n различных натуральных чисел pi, 1pi, 2, ..., pi, n (1 ≤ pi, j ≤ n), характеризующих соответствующие шаффл-машины.

В последней строке записано единственное натуральное число x (1 ≤ x ≤ n) — номер карты, которую Иннокентий желает видеть на первом месте в колоде.

Числа n и k удовлетворяют соотношению 1 ≤ n·k ≤ 200000.

Выходные данные

Выведите «YES», если ученый сможет добиться того, чтобы карта с номером x встала на первое место, и «NO» иначе.

Примеры
Входные данные
4
4 3 2 1
2
1 2 4 3
2 3 1 4
1
Выходные данные
YES
Входные данные
4
4 3 2 1
2
1 2 4 3
2 1 3 4
1
Выходные данные
NO
K. Вечный двигатель
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

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

Разумеется, может возникнуть ситуация, когда лучи, испускаемые разными лазерами, пересекаются. Если два луча пересекаются, то из-за их взаимодействия каждую секунду будет выделяться энергия, равная одному джоулю. Таким образом, чем больше лучей пересекается друг с другом, тем больше энергии будет выделять генератор. Иннокентий заметил, что если генератор энергии будет выделять ровно k джоулей в секунду, то двигатель будет работать до 10 раз дольше. Ученый может направлять лучи лазеров в любые приемники, однако он пока не придумал конструкции, которая давала бы в точности необходимое количество энергии. Вам придется помочь ученому настроить генератор.

Входные данные

В единственной строке через пробел записаны два целых числа n и k (1 ≤ n ≤ 200000, ) — количество лазеров в генераторе энергии и мощность генератора, которой хочет достичь Иннокентий.

Выходные данные

Выведите n чисел через пробел. i-ое число должно равняться номеру приемника, в который надо направить i-ый лазер. Как лазеры, так и приемники пронумерованы целыми числами от 1 до n. Гарантируется, что решение существует. Если существует несколько решений, выведите любое.

Примеры
Входные данные
4 5
Выходные данные
4 2 3 1
Входные данные
5 7
Выходные данные
4 2 5 3 1
Входные данные
6 0
Выходные данные
1 2 3 4 5 6
L. Министерство правды
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

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

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

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

Входные данные

В единственной строке записано слово, которое надо изменить Андрею. Оно состоит из строчных латинских букв и имеет длину от 1 до 200000.

Выходные данные

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

Примеры
Входные данные
abccabd
Выходные данные
abacaba
Входные данные
wasitadogoracatiate
Выходные данные
wasitacaroracatisaw
M. Функция Хевисайда
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
stdin
вывод
stdout

Функцией Хевисайда называется кусочно-постоянная функция, равная нулю для отрицательных значений аргумента и единице — для неотрицательных:

Дана функция f(x) = θ(s1x - a1) + θ(s2x - a2) + ... + θ(snx - an), где si =  ± 1. Посчитайте ее значение в точках x1, x2, ..., xm.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 200000) — количество слагаемых в функции.

В следующих n строках записано по два целых числа si и ai (si =  ± 1,  - 109 ≤ ai ≤ 109) — параметры i-ого слагаемого функции.

В следующей строке записано единственное целое число m (1 ≤ m ≤ 200000) — количество значений аргумента, для которых нужно посчитать значение выражения.

В последней строке записано m целых чисел x1, ..., xm ( - 109 ≤ xi ≤ 109) — точки, в которых надо посчитать значение выражения.

Выходные данные

Выведите m строк. В i-ой строке выведите значение выражения f(xi).

Примеры
Входные данные
6
1 3
-1 2
1 9
-1 2
1 7
-1 2
8
0 12 2 8 4 -3 7 9
Выходные данные
0
3
0
2
1
3
2
3