Задача A. Игра «О’Макс!»

Ограничение по времени:

3 секунды (без учета времени работы модуля)

Ограничение по памяти:

32 мегабайта (без учета памяти, занимаемой модулем)

Максимальный балл:

100 баллов

Рассмотрим следующую игру. Дано N различных точек, расположенных на окружности и занумерованных в порядке обхода по часовой стрелке (2≤N≤50). Два игрока по очереди выполняют ходы. Ход заключается в том, что разрешается соединить какие-то две из этих точек отрезком так, чтобы он не пересекал уже проведенные отрезки и так, чтобы ни из какой вершины не выходило более одного отрезка. Проигрывает тот, кто не может сделать ход.

Напишите программу, которая, играя с модулем, реализует стратегию первого игрока.

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

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

НЕ нашли? Не то? Что вы ищете?

Free Pascal

function Init:integer;

procedure Move(u1,v1:integer; var u2,v2:integer);

GNU C/C++

int Init();

void Move(int u1, int v1, int* u2, int* v2);

Для тестирования собственных решений, вы можете использовать модуль game, который вы можете найти в каталоге game на диске Q. Данный модуль реализует некоторую (не обязательно наилучшую) стратегию второго игрока. Значение числа N он считывает из файла game. in. Результат игры он записывает на экран.

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

Задача B. Склейка

Имя входного файла:

merge. in

Имя выходного файла:

merge. out

Ограничение по времени:

3 секунды

Ограничение по памяти:

32 мегабайта

Максимальный балл:

100 баллов

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

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

Формат входных данных

Первая строка входного файла содержит целые числа N и M — количество вершин и дуг в исходном графе (1 ≤ N ≤ 200). Следующие M строк содержат описания дуг, каждая из которых задается номером начальной и конечной вершины. Граф не содержит петель и кратных ребер.

Формат выходных данных

В выходной файл выведите K — число операций склейки. Далее выведите K пар чисел, задающих номера склеиваемых вершин.

Примеры

merge. in

merge. out

4 4

1 2

4 3

1 3

4 2

2

1 2

4 3

Задача C. Гора

Имя входного файла:

mountain. in

Имя выходного файла:

mountain. out

Ограничение по времени:

3 секунды

Ограничение по памяти:

32 мегабайта

Максимальный балл:

100 баллов

Недавно археологи Слегкаярославца нашли древнюю рукопись. В ней автор описывает свои похождения по горе Х загадочного материка Атлантида.

Известно, что гора имеет высоту H метров и длину L метров. Если расположить чертеж профиля горы на координатной плоскости так, что гора будет расположена в первой координатной четверти, ее самая левая точка будет иметь координаты (0, 0), а правая – (L, 0), то профиль горы будет иметь вид ломаной такого вида, что:

·  все вершины ломанной имеют целочисленные абсциссы и ординаты;

·  каждое звено ломаной либо параллельно оси абсцисс, либо наклонено к ней под углом 45 градусов;

·  существует хотя бы одна вершина ломаной с ординатой равной H и не существует вершин с ординатой больше H;

·  ломаная имеет с осью абсцисс только две общие точки – (0, 0) и (L, 0);

·  на ломаной лежит ровно L+1 целочисленная точка.

В рукописи указываются замеры – последовательность высот, в порядке прохождения горы слева направо. Известно, что замеры делались только в целочисленных точках. Расстояние между любыми двумя соседними замерами не менее 1 метра.

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

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

Формат входных данных

В первой строке записана тройка чисел H, L, K (1 £ H, L £ 40, 0 £ K £ L+1), где H – высота горы, L – длина горы, K – количество замеров. Во второй строке записано K целых чисел, каждое из которых соответствует высоте замера. Порядок соответствует движению слева направо.

Формат выходных данных

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

Примеры

mountain. in

mountain. out

2 5 0

3

3 8 4

2 2 3 1

7

40 40 0

0

Пояснение

Для примера #1 возможные профили это:

_

/ \ _/\ /\_

/ \ / \ / \