Страница 1 из 2

Разрезание пластины.

Добавлено: 28 июл 2008, 16:44
Alg
Подскажите как можно решить эту задачу.

С помощью прямоугольной матрицы размером m x n задается пластина, составленная из квадратиков одного размера, примыкающих друг к другу сторонами: единичное значение элемента матрицы означает наличие в этом месте квадратика пластины, ноль – пустое место (см.рис.)

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

Входные данные

Входной файл input.txt содержит в первой строке пару целых чисел m и n – размеры матрицы (2<=m,n<=20), в каждой из следующих m строк файла содержатся n цифр соответствующей строки матрицы без пробелов.

Выходные данные

В первую строку выходного файла output.txt необходимо вывести “YES”, если требуемое разрезание возможно, и “NO” – в противном случае. Затем, если разрезание возможно, необходимо, начиная со следующей строки, вывести ту же матрицу, оставив в ней «1» на месте квадратиков, относящихся к одной части, и заменив цифрой «2» квадратики, относящиеся к другой части.

http://stud-olymp07.nm.ru/zad_osn.htm

Re: Разрезание пластины.

Добавлено: 29 июл 2008, 15:40
Albor
Для начала, можно пересчитать единицы в матрице. Если будет нечётное число, то - однозначно, пластина не делится. Дальше нужно подумать! В приведенной ссылке непонятка - почему 1й вариант делится а второй нет. В обоих случаях требуется зеркальное отображение половинок (хотя об этом в условии ничего не сказано - только поворот и перенос), то есть условию не удовлетворяют оба примера.

Re: Разрезание пластины.

Добавлено: 30 июл 2008, 13:50
Alg
В первом случае можно повернуть на 90 градусов против часовой стрелки и совместить параллельным переносом, т. к. на самом деле это квадраты, хотя на рисунке и прямоугольники.

Re: Разрезание пластины.

Добавлено: 30 июл 2008, 14:01
airyashov
как раз все понятно поворот и перенос, 1 фигура поворот вправо и перенос, 2 - такими действиями не получается

Re: Разрезание пластины.

Добавлено: 30 июл 2008, 14:25
demon416
в принципе если заменить " вдоль границ квадратиков" на "вертикальной или горизонтальной линией вдоль границ квадратиков" что как можно доказать является единственным всегда присутствующим при симметрии вариантом разреза то задача реализуется элементарно - перебором

Re: Разрезание пластины.

Добавлено: 31 июл 2008, 12:55
Alg
Разрез не обязательно горизонтален. Например,

00000
00100
01110
01010
00000

В этом случае после разреза не горизонтально, а по ломаной, фигуры совместимы.

Re: Разрезание пластины.

Добавлено: 31 июл 2008, 13:00
airyashov
Alg писал(а):Разрез не обязательно горизонтален. Например,

00000
00100
01110
01010
00000

В этом случае после разреза не горизонтально, а по ломаной, фигуры совместимы.

опишите фигуры 1 и 2, отдельными цифрами

Re: Разрезание пластины.

Добавлено: 31 июл 2008, 13:13
demon416
мне тоже не сильно понятно как можно разрезать такую фигуру
кстати у меня написано по горизонтали ИЛИ по вертикали
везде где есть вариант с ломаной есть вариант с прямой изза того что при указанных вариантах совмещения возможно всего 4 варианта поворота

Re: Разрезание пластины.

Добавлено: 31 июл 2008, 17:27
Alg
airyashov писал(а):опишите фигуры 1 и 2, отдельными цифрами


00000
00100
01210
02020
00000

Если я это правильно понимаю.

Re: Разрезание пластины.

Добавлено: 31 июл 2008, 17:58
demon416
блин действительно можно так разрезать
тогда только рекурсия остается
хотя назвать такое пластиной у меня язык бы не повернулся