, Compact Tree on a Table Имя входного файла: Имя выходного файла: Ограничение по времени: Ограничение по памяти: стандартный ввод стандартный вывод 3 секунды 256 мегабайт Вам дана двумерная таблица A из n строк и m столбцов. Каждая ячейка таблицы обозначена либо точкой ("."), либо решеткой ("#"). Первое значит, что ячейка свободна; второе - что ячейка занята. Две ячейки являются соседними в случае, если у них имеется общая сторона. Путь между ячейками - последовательность соседних клеток, которая начинается и заканчивается на данные ячейки. Путь является простым, если содежит каждую ячейку таблицы не более одного раза. Расстояние между двумя ячейками - длина кратчайшего простого пути между ними минус один. Множество свободных ячеек таблицы является связным, если существует путь между любыми двумя ячейками этого множества. Связное множество является деревом, если любые две ячейки этого множества связывает единственный простой путь. Гарантируется, что таблица содержит хотя бы одну свободную ячейку, а также что все свободные ячейки образуют связное множество. Ваша задача - выбрать некоторое дерево на данной таблице. Ваше решение будет оцениваться следующим образом: Обозначим количество свободных клеток таблицы как f0 . Обозначит f0 минус количество древесных ячеек как f1 . Обозначим сумму расстояний до самой удаленной древесной ячейки для каждой древесной ячейки как f2 . Штраф, который вы получите равен a · f12 + b · f2 √ a2 + b2 · f0 , где a и b - некоторые положительные целые параметры из ввода. Вам следует минимизировать штраф. Формат входных данных Первая строка содержит четыре целых числа n, m, a и b. Каждая из следующих n строк содержит строку из m символов - очередной ряд таблицы A. Формат выходных данных Выведите n строк, каждая из которых содержит строку из m символов. Древесные ячейки следует обозначит символом "x". Пример стандартный ввод 10 10 1 3 .#........ ..#.....#. .......... .......... ..#....... .......... ...#.....# ##........ .......... ..##...... стандартный вывод .#xx.x.xxx ..#xxxxx#x ..xx.x..xx .xx.xxx.x. xx#xx.x.x. x.x...x.xx x.x#xxx.x# ##xxx.xx.x xxx.xx..xx x.##.xxxx. Замечание • 10 ⩽ n, m ⩽ 50 Страница 1 из 2 , • 1 ⩽ a, b ⩽ 100 Оценивание тестов: Значения n, m, a и b выбраны для каждого тесты вручную. Также, для генерации теста выбраны два положительных числа 0 ⩽ p < q. Каждая из ячеек таблицы является заблокированной с вероятностью pq и свободной с вероятностью q−p q . Если полученная таблица не является валидной (т.е. множество свободных клеток пусто и/или не является связным), то таблица генерируется до тех пор, пока тест не станет валидным. Параметра для тестов: # n m a b p/q 1 50 50 1 1 1 / 100 2 50 50 1 1 1 / 30 3 50 50 1 1 1 / 10 4 50 50 1 1 1/8 5 50 50 1 2 1 / 10 6 50 50 2 1 1 / 10 7 50 50 3 1 1 / 10 8 50 50 1 3 1 / 10 9 50 50 100 1 1 / 10 10 50 50 1 100 1 / 10 Страница 2 из 2