Страница: 1 [Всего задач: 3]
[Блиц-тур по комбинаторике
]
|
|
Сложность: 5 |
Уважаемые господа! Сегодня вам предлагается для каждого из следующих
типов комбинаторных объектов:
1) перестановки N-элементного множества (лексикографический
порядок);
2) K-элементные подмножества N-элементного множества
(лексикографический порядок);
3) разбиения N-элементного множества на K непустых подмножеств
(лексикографический, т.е. алфавитный, порядок);
4) разбиения числа N на слагаемые;
5) правильные скобочные последовательности из 2N скобок;
6) двоичные деревья с N вершинами;
7) цепочки из нулей и единиц длины N без двух единиц подряд;
8) перестановки N-элементного множества (порядок, в котором соседние
перестановки отличаются транспозицией соседних элементов);
9) K-элементные подмножества N-элементного множества (порядок, в котором
соседние подмножества отличаются двумя элементами);
10) все подмножества N-элементного множества (порядок, в котором соседние
подмножества отличаются добавлением или удалением одного элемента);
11) подвешенные деревья с N вершинами;
решить следующие две подзадачи:
найти общее количество объектов и породить M объектов, начиная с L-го;
по заданным объектам получить их номера.
В качестве N-элементного множества везде подразумевается множество
{1, ..., N}. Там, где порядок порождения комбинаторных объектов не указан, Вы
можете выбрать его по своему усмотрению. Нумерация объектов начинается с
нуля.
Таким образом, Вам предстоит написать 11 программ. Задача
засчитывается, если Ваша программа прошла все тесты, в противном случае
Вам начисляются штрафные баллы за неверный подход (20% от стоимости
задачи), и Вы имеете возможность исправить решение.
В зависимости от того, какую из подзадач требуется решить, входной и
выходной файлы имеют один из следующих двух форматов (тем самым, Ваша
программа должна сама определять номер решаемой подзадачи).
Входные данные для подзадачи 1
N K L M
Выходные данные для подзадачи 1
<Число объектов>
<Объект номер L>
...
<Объект номер L+M-1>
Каждый объект должен выводиться с новой строки. Формат вывода объектов
остается на Ваше усмотрение с условием, что он должен быть читабельным.
Входные данные для подзадачи 2
N K
<Объект 1>
...
<Объект M>
Формат записи объектов будет соответствовать выходному формату,
используемому Вашей программой при решении подзадачи 1.
Выходные данные для подзадачи 2
<Номер объекта 1>
...
<Номер объекта M>
Каждый номер должен быть выведен с новой строки.
Технические ограничения
Если в данной задаче число K не используется, то вместо него будет указан
нуль. Числа N и K во всех задачах не превосходят 100, число L не превышает
2·109
, число M – 10 000. Номера объектов в подзадаче 2 не будут превышать
2.1·109. Все входные данные корректны.
[Отравленный пирог
]
|
|
Сложность: 4 |
Для игры «Отравленный пирог» используется прямоугольный пирог,
разделенный на M «строк» горизонтальными разрезами и на N «столбцов» –
вертикальными. Таким образом, пирог должен быть разбит на
M × N клеток, правая нижняя из которых «отравлена».
Играют двое игроков, ходы делаются по очереди. Каждый ход заключается
в том, что игрок выбирает одну из еще не съеденных клеток пирога и съедает
все клетки, расположенные левее и выше выбранной (в том числе и
выбранную). Проигрывает тот, кто съедает отравленную клетку.
Требуется написать программу, которая по заданной игровой позиции
определяет все возможные выигрышные ходы для начинающего в этой позиции.
Входные данные
Данные во входном файле расположены в следующем порядке: M, N
(1 ≤ M, N ≤ 9), X1, ..., XM. Здесь Xi
– число оставшихся клеток в i-м снизу горизонтальном ряду. Все числа во входном файле разделяются пробелами
и/или символами перевода строки.
Выходные данные
В первую строку выходного файла необходимо вывести количество различных
выигрышных ходов К, а в последующие K строк – сами выигрышные ходы.
Каждый ход задается парой чисел (i, j), где i – номер (снизу) горизонтального
ряда, а j – номер (справа) вертикального ряда, которому принадлежит
выбранная клетка (1 ≤ i ≤ M, 1 ≤ j ≤ N).
Пример входного файла
3 5
5 4 3
Пример выходного файла
1
3 1
[Кошки-Мышки
]
|
|
Сложность: 4- |
Игровое поле для игры «Кошки-мышки» представляет собой совокупность
кружков, некоторые из которых соединены линиями. Первый игрок играет за
«кошек», второй – за «мышек». В процессе игры кошки и мышки
располагаются в кружках игрового поля. Ходы совершаются игроками по очереди. За один ход игрок может
передвинуть некоторые из своих фигур (кошек или мышек) по линиям, ведущим
из тех кружков, где они в данный момент находятся. Первыми ходят кошки.
В случае если кошка окажется в одном кружке с мышкой, мышка считается
съеденной. Цель первого игрока – съесть максимальное число мышек и сделать
это как можно быстрее, цель второго – помешать первому игроку.
Напишите программу, определяющую максимальное число мышек, которых
съедят кошки, и номер хода, на котором будет съедена последняя из них, в
предположении о наилучших действиях обоих игроков.
Входные данные
В первой строке входного файла содержатся два целых числа N и M –
количество кружков (1 ≤ N ≤ 20) и линий (1 ≤ M ≤
200) на игровом поле. В следующих M строках указаны номера кружков, которые соединяются
очередной линией. Далее следуют количество кошек и номера кружков, в
которых они первоначально располагаются. После этого в таком же формате
записаны данные о мышках. Суммарное количество кошек и мышек не
превосходит четырех.
Выходные данные
Запишите в выходной файл максимальное количество мышек, съедаемых
кошками, минимальное число ходов, необходимых для этого, и все возможные
положения кошек после первого хода, обеспечивающие достижение цели за
указанное число ходов.
Пример входного файла
8 9
1 2
2 3
3 4
4 1
1 5
5 6
6 7
7 8
8 6
1 5
2 3 7
Пример выходного файла
1 2
6
Страница: 1 [Всего задач: 3]