Задача B. Эльфы и олени

Автор:VI Всероссийская командная олимпиада школьников по программированию   Ограничение времени:2 сек
Входной файл:elves.in   Ограничение памяти:64 Мб
Выходной файл:elves.out  

Условие

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

Но волшебные олени — строптивые животные, поэтому не любые два эльфа могут ехать на любом олене. А именно, каждый олень характеризуется некоторой строптивостью ai, а каждый эльф — темпераментом bi. Два эльфа j и k могут ехать на i-м олене в том и только в том случае, если либо bj < ai < bk, либо bk < ai < bj.

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

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

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

Первая строка входного файла содержит два целых числа m и n — количество оленей и эльфов, соответственно.

Вторая строка содержит m целых чисел ai — строптивость оленей. Третья строка содержит n целых чисел bi — темперамент эльфов.

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

На первой строке выходного файла выведите одно число k — максимальное количество оленей, которое Санта-Клаус может включить в свою упряжку. На следующих k строках выведите по три целых числа: di, ei,1, ei,2 — для каждого оленя в упряжке выведите его номер и номера эльфов, которые на нем поедут. Если решений несколько, выведите любое.

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

Ограничения

1 ≤ m, n ≤ 100 000, 0 ≤ ai ≤ 109, 0 ≤ bi ≤ 109

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

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

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

Автор:VI Всероссийская командная олимпиада школьников по программированию   Ограничение времени:2 сек
Входной файл:exp.in   Ограничение памяти:64 Мб
Выходной файл:exp.out  

Условие

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

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

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

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

На первой строке входного файла записано целое число n — количество этапов эксперимента.

Следующие n строк содержат описание этапов. Пронумеруем этапы от 1 до n в некотором произвольном порядке. Тогда i-я из этих строк описывает i-й этап. Каждый этап описывается последовательностью целых чисел. Первое число равно нулю, если на этом этапе Игорь управляет генератором, и единице, если он управляет манипулятором. Затем записано целое число ri — количество этапов, которые должны быть выполнены перед выполнением данного. За ним следуют номера этих этапов — ri различных целых чисел в диапазоне от 1 до i − 1.

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

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

Ограничения

1 ≤ n ≤ 100

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

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

Задача E. Автомобильные номера

Автор:VI Всероссийская командная олимпиада школьников по программированию   Ограничение времени:2 сек
Входной файл:numbers.in   Ограничение памяти:64 Мб
Выходной файл:numbers.out  

Условие

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

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

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

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

В номере могут использоваться следующие буквы: "A", "B", "C", "E", "H", "K", "M", "O", "P", "T", "X", "Y" (эти буквы имеют схожие по написанию аналоги как в русском, так и в латинском алфавите). В этой задаче во входном файле будут использоваться буквы латинского алфавита.

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

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

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

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

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

Входной файл (numbers.in) Выходной файл (numbers.out)
1
X772KX
9
X277XK
X277KX
X727XK
X727KX
X772XK
X772KX
K277XX
K727XX
K772XX

Задача F. Планета Плюк

Автор:VI Всероссийская командная олимпиада школьников по программированию   Ограничение времени:2 сек
Входной файл:pluk.in   Ограничение памяти:64 Мб
Выходной файл:pluk.out  

Условие

На планете Плюк, поверхность которой мы будем считать абсолютно плоской, был разработан новый принцип перемещения единственного имеющегося там транспортного средства — пепелаца. А именно, на расстоянии одного километра друг от друга в точках (0, 0) и (1, 0) были построены две станции управления пепелацами A и B. С помощью них можно мгновенно переместить любой пепелац, повернув его на 90 градусов по или против часовой стрелки относительно точки A или B. Расстояние от пепелаца до соответствующей станции при этом не меняется. Следующее перемещение можно делать как относительно той же станции, так и относительно другой.

Например, если повернуть пепелац, находящийся в точке (3, 1) на 90 градусов против часовой стрелки относительно станции A, то он переместится в точку (−1, 3), если его затем повернуть на 90 градусов по часовой стрелке относительно станции B, то он переместится в точку (4, 2), если затем повернуть его вокруг станции B по часовой стрелке еще раз, он переместиться в точку (3, −3).

Один житель планеты недавно решил отправиться на своем пепелаце в гости к другу. Житель проживает около точки с координатами (x1, y1), а его друг — около точки с координатами (x2, y2). Помогите жителю с помощью станций управления пепелацем оказаться как можно ближе к месту, где проживает его друг, чтобы потом меньше было идти по пустыне.

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

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

Входной файл содержит четыре целых числа — x1, y1, x2 и y2, они не превышают 104 по абсолютной величине.

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

Выведите в выходной файл последовательность перемещений с использованием станций управления, которая перемещает пепелац из точки (x1, y1) как можно ближе к точке (x2, y2).

Поворот по часовой стрелке относительно станции A обозначается как "+A", поворот против часовой стрелки относительно станции A обозначается как "-A", соответствующие повороты относительно станции B обозначаются как "+B" и "-B". Выводите по одному перемещению на строке.

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

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

Входной файл (pluk.in) Выходной файл (pluk.out)
1
3 1
3 -3
-A
+B
+B
2
0 0
3 0
-B
-B

Задача I. Изображение таблицы

Автор:VI Всероссийская командная олимпиада школьников по программированию   Ограничение времени:2 сек
Входной файл:table.in   Ограничение памяти:64 Мб
Выходной файл:table.out  

Условие

При разработке программ для просмотра веб-страниц одной из наиболее сложных задач является корректное отображение таблиц. Компания «Kozilla», в которой вы работаете, планирует разработать новую версию браузера «Waterrat» для работы в терминальном режиме, и просит вас написать фрагмент ядра отображения веб-страниц, ответственный за формирование структуры таблиц.

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

Таблица состоит из строк, каждая строка состоит из одной или нескольких ячеек, j-я ячейка i-й строки имеет ширину ai, j.

По заданным параметрам таблицы постройте символическое изображение ее структуры.

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

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

Описание каждой строки включает число mi — количество ячеек этой строки, и mi целых чисел ai,1, ai,2, …, ai,mi — ширину каждой из ячеек строки.

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

Выведите в выходной файл символическое изображение структуры таблицы. Изображение i-й строки таблицы должно начинаться изображением горизонтальной линии, составленным из символов "+" (плюс) и "-" (минус). Затем должна следовать строка, содержащая пробелы и символы "|" (вертикальная черта). Первым символом строки должна быть вертикальная черта, затем ai,1 пробелов, затем вертикальная черта, затем ai,2 пробелов, и так далее, всего mi блоков пробелов. После последнего блока должна следовать вертикальная черта. После последней строки таблицы также должно следовать изображение горизонтальной линии. В изображении горизонтальной линии используйте символ "+", если сверху или снизу от этой позиции находится вертикальная черта, и "-" в противном случае. Горизонтальная линия должна иметь минимальную возможную длину, чтобы над каждым символом вертикальной черты следующей строки и под каждым символом вертикальной черты предыдущей строки были символы "+".

Ограничения

1 ≤ n ≤ 100, 1 ≤ mi ≤ 10, 1 ≤ ai, j ≤ 20

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

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

Задача J. Неправильная считалка

Автор:VI Всероссийская командная олимпиада школьников по программированию   Ограничение времени:2 сек
Входной файл:wrong.in   Ограничение памяти:64 Мб
Выходной файл:wrong.out  

Условие

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

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

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

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

Помогите им ответить на этот вопрос.

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

Входной файл содержит два целых числа — n и k.

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

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

Ограничения

1 ≤ n ≤ 1000, 1 ≤ k ≤ 109

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

Входной файл (wrong.in) Выходной файл (wrong.out)
1
6 14
3
2
6 13
0

0.344s 0.010s 25