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

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

Условие

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

Но волшебные олени — строптивые животные, поэтому не любые два эльфа могут ехать на любом олене. А именно, каждый олень характеризуется некоторой строптивостью 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

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

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

Условие

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

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

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

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

На первой строке входного файла записано целое число 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

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

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

Условие

На планете Плюк, поверхность которой мы будем считать абсолютно плоской, был разработан новый принцип перемещения единственного имеющегося там транспортного средства — пепелаца. А именно, на расстоянии одного километра друг от друга в точках (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

0.026s 0.003s 13