ДОМ ОРИГИНАЛЬНОСТИ И ГАРМОНИИ

advertisement
Отборы на IOI-2007, тур I
МАДЖОНГ
Входной файл:
Выходной файл:
mahjong.in
mahjong.out
Петя недавно узнал о существовании игры маджонг. Она ему показалась настолько интересной,
что он играет в нее целыми днями. Для этой игры необходима прямоугольная доска размером m  n полей
и набор фишек разных цветов. При этом фишек каждого цвета в наборе должно быть ровно две. В начале
игры фишки располагаются на доске произвольным образом.
После этого за один ход разрешается снять пару фишек одного цвета, если они обе являются самыми правыми в своих горизонталях, либо самыми левыми в своих горизонталях, либо самыми нижними в
своих вертикалях, либо самыми верхними в своих вертикалях. Если соответствующей пары фишек нет, то
игра закончена.
Например, на рисунке показан пример позиции в игре, когда можно сделать два хода: снять две
фишки четвертого цвета, поскольку они являются самыми левыми в своих горизонталях, либо снять две
фишки первого цвета, поскольку они являются самыми верхними в своих вертикалях.
5
4
2
1
3
3
5
4
1
2
Цель игры состоит в том, чтобы сделать как можно больше ходов.
Задана начальная расстановка фишек на доске. Требуется найти самую длинную последовательность ходов, которую может сделать Петя из заданной позиции.
Формат входных данных: первая строка входного файла содержит размеры доски: два целых числа m и n (1 ≤ m, n ≤ 300, хотя бы одно из этих чисел четно). Далее следуют m строк по n чисел в каждой, j-е
число в i-й из этих строк представляет собой номер цвета j-й слева фишки в i-й горизонтали. Цвета пронумерованы натуральными числами от 1 до nm / 2. На доске ровно две фишки каждого цвета.
Формат выходных данных: в первой строке выходного файла выведите k — максимальное количество ходов, которое может сделать Петя из заданной начальной позиции. Во второй строке выходного
файла выведите разделенные пробелами k чисел — номера цветов фишек в том порядке, в котором они
должны сниматься с доски. Если возможных ответов несколько, выведите любой.
Примеры входных и выходных данных:
mahjong.in
3 4
1 2 3 4
1 2 3 4
5 5 6 6
4 4
4 1 3 6
5 2 5 2
1 7 3 8
4 6 7 8
mahjong.out
6
1 2 3 4 5 6
3
4 1 8
МОСТЫ И ТОЧКИ СОЧЛЕНЕНИЯ
Входной файл:
Выходной файл:
bridges.in
bridges.out
Отборы на IOI-2007, тур I
Задан связный неориентированный граф G. В графе возможно наличие нескольких ребер между одной и той же парой вершин. Найдите все мосты и все точки сочленения в графе G.
Формат входных данных: первая строка входного файла содержит целое число N (1 ≤ N ≤ 10000) количество вершин графа. Вторая строка входного файла содержит целое число M (0 ≤ M ≤ 100000) - количество ребер графа. В каждой из следующих M строк содержатся ровно два числа a и b (1 ≤ a, b ≤ N).
Эти числа описывают ребро, соединяющее вершины с номерами a и b. Вершины нумеруются последовательными натуральными числами от 1 до N.
Формат выходных данных: первая строка выходного файла должна содержать число X - количество
мостов в графе G и X чисел - номера ребер, являющихся мостами. Ребра нумеруются последовательными
натуральными числами от 1 до M в порядке их появления во входном файле.
Следующая строка выходного файла должна содержать число Y - количество точек сочленения в графе G и Y чисел - номера вершин, являющихся точками сочленения. Выводите номера мостов и точек сочленения в порядке возрастания.
Пример входных и выходных данных:
bridges.in
6
7
1 2
2 3
1 3
3 4
4 5
5 6
4 6
Bridges.out
1 4
2 3 4
РАЗБИЕНИЕ ПРЯМОУГОЛЬНИКА
Входной файл: rt.in
Выходной файл: rt.out
Геометрическую фигуру называют выпуклой, если любой отрезок, концы которого принадлежат этой фигуре, лежит целиком в ней. Например, на приведенном рисунке (см. ниже) первая
слева фигура выпуклая, а средняя и правая не являются выпуклыми (для каждой из них на примерах показан отрезок, нарушающий условие выпуклости):
Напишите программу RT, которая делит составленный из NM клеток прямоугольник на K
кусков так, что каждый кусок удовлетворяет следующим условиям:
1. кусок состоит из некоторого числа целых клеток, т.е. ни одна клетка не разделена между
несколькими кусками;
2. кусок является 4-х связным, т.е. из каждой его клетки можно попасть в любую другую, перемещаясь из одной клетки в соседнюю через их общую сторону не выходя за пределы
куска;
3. кусок не является выпуклым
Отборы на IOI-2007, тур I
Найденные K кусков должны полностью покрывать весь прямоугольник, при этом не должно оставаться ни одной свободной клетки
Формат входных данных: первая строка текстового файла содержит числа N (1<N<101) и
M (1<M<101) – количество строк и столбцов прямоугольника соответственно, разделенные пробелом. Во второй строке записано число K (1<K<=(NM)/3) - количество кусков.
Формат выходных данных: в текстовый файл выведите N строк по M целых чисел 1…K в
каждой так, что при соединении клеток, находящихся на позициях, указанных одним и тем же
числом, получилось бы требуемое разбиение.
Если возможных разбиений несколько – вывести любое из них. Условимся считать, что
каждый из тестов содержит, как минимум, одно некоторое разбиение
Пример входных и выходных данных:
rt.in
4 5
3
rt.out
1 1 1 1
1 2 2 2
2 2 2 2
3 3 3 3
1
2
3
3
Download