Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2013, 16:02   #1
chromes
Новичок
Джуниор
 
Регистрация: 25.01.2011
Сообщений: 2
Вопрос Трехцветные таблицы

Всем привет.
Вообщем нужно решить олимпиадную задачу на Delphi, и название её 'Трехцветные таблицы', думать уже запарился, помогите пожалуйста, хотя бы как её сделать, т.е. последовательность.
Код:
Прямоугольную таблицу, состоящую из N строк и M столбцов, раскрашивают
следующим образом. Каждый столбец таблицы и каждую строку красят либо
в синий, либо в желтый цвет. В итоге клетки, оказавшиеся на
пересечении синего столбца и синей строки оказываются синими, желтого
столбца и желтой строки — желтыми, а клетки на пересечении синего
столбца и желтой строки, или, 
наоборот, желтого столбца и синей строки — зелеными.

Раскраска всех клеток таблицы (или просто сама таблица) называется правильной, 
если она может быть получена описанным выше способом.

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

Формат входных данных
Вводятся числа N и M — количество строк и столбцов таблицы (1≤N≤30, 1≤M≤30). 
Далее записано N строк по M чисел в каждой, задающие цвета, в которые должны быть окрашены клетки:

·         0 — клетка может в итоге быть любого цвета

·         1 — клетка должна быть синей

·         2 — клетка должна быть желтой

·         3 — клетка должна быть зеленой

Формат выходных данных
Выведите одно число - количество различных правильных таблиц, в которых нужные клетки покрашены в нужный цвет. 
Обратите внимание, что если два или более способов раскраски столбцов и строк таблицы приводят  к одинаковой раскраске самой таблицы, 
то это нужно считать как один вариант раскраски таблицы.

Последний раз редактировалось Serge_Bliznykov; 06.03.2013 в 23:43.
chromes вне форума Ответить с цитированием
Старый 06.03.2013, 16:38   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Читаем условие с конца.
Цитата:
Обратите внимание, что если два или более способов раскраски столбцов и строк таблицы приводят к одинаковой раскраске самой таблицы, то это нужно считать как один вариант раскраски таблицы.
Это возможно, если и только если все клетки таблицы зелёные. Что, в свою очередь, возможно ровно в двух случаях. То есть, если среди вариантов раскраски возможен "все зелёные", достаточно отнять от ответа 1.
Цитата:
Выведите одно число - количество различных правильных таблиц, в которых нужные клетки покрашены в нужный цвет.
Если все клетки - "любые" либо "зелёные", понадобится внести поправку на предыдущий пункт.
В остальном же, всего существует 2^(N+M) вариантов раскраски таблицы. Строки и столбцы можно условно называть "жёлтыми", "синими", "полуопределёнными" и "произвольными"; по сути, они образуют двудольный граф, рёбра которого суть заданные (не произвольного цвета) клетки. Строка или столбец, не содержащая окрашенных клеток, "произвольна"; соответствующая ей вершина в графе изолирована. Строка или столбец, содержащий синюю или жёлтую клетку, "определённая" (а если содержит и то, и то - ответ 0). Строка или столбец, содержащий только зелёные клетки - внимание! - "полуопределённый", если в компоненте связности графа, к которой он принадлежит, есть только зелёные вершины. Наконец, если строка или столбец содержит только зелёные клетки, но в соответствующей компоненте связности есть "жёлтые" или "синие" вершины, то всю эту компоненту можно раскрасить и необходимо потом проверить раскраску (так как она может оказаться противоречивой, в этом случае ответ также 0).
Окончательно, число таблиц равно 2^S, где S - суммарное число изолированных вершин и "полуопределённых" компонент связности.

Как можно видеть, если заданы цвета всех клеток, то компонента связности ровно одна и может быть получена ровно одним способом (S=0), если только не все клетки зелёные (S=1).
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данные из таблицы в список, если в ячейке таблицы стоит количество oleg_sh Microsoft Office Excel 4 08.10.2012 14:52
Макрос: заполнение таблицы данными из другой таблицы с автоматическим добавлением строк yevgeniy.demidov Microsoft Office Excel 6 06.09.2012 15:27
Внесение в поле таблицы сумму значений из другой таблицы по условию Сурка SQL, базы данных 2 25.12.2011 17:47
Access ограничить значение поля таблицы значениями полей другой таблицы Сергей089 Microsoft Office Access 10 08.12.2010 02:22
Данные из двух полей исх. таблицы в одно поле сводной таблицы Strelec79 Microsoft Office Excel 2 02.08.2009 13:59