3. Радиолюбитель Ограничение времени 1 секунда
Ограничение памяти 244Mb
Ввод grass.in
Вывод grass.out
Джон решил заняться радиолюбительством, прочитал в сети Интернет о технологии ЛУТ (лазерно-утюжная технология) и решил попробовать. Суть технологии упрощённо состоит в следующем: сначала на лазерном принтере печатают маску (схему проводников), которую накладывают на заготовку платы, покрытую медью, и травят кислотным раствором. В результате, медь растворяется там, где нет маски (т.е. чернил).
Однако, принтер у Джона очень старый, в результате чего некоторые дорожки перетравились и оказались разорванными. Он решил их дорисовать дорогим контактным клеем "Контактол". Естественно, он хочет потратить как можно меньше этого клея.
Джон раньше занимался математикой, поэтому быстро формализовал и упростил задачу. Во-первых, каждый раз достаточно рассматривать только два целых участка повреждённого проводника. Во-вторых, если для соединения каждой пары таких участков потратить минимум клея, то минимум клея уйдёт и на весь проводник.
Осталось дело за малым - научиться оптимально соединять два участка проводника. Участок платы представлен массивом символов N*M, например, так:
Здесь каждый символ 'X' обозначает сохранившийся участок проводника, на котором медь осталась. Два символа 'X' принадлежат одному и тому же участку, если они вертикально или горизонтально соседние (диагонально соседние таковыми не считаются). Гарантируется, что в выбранном участке имеется только два участка проводника.
Джон хочет использовать как можно меньше клея, чтобы объединить два участка проводника в один. В примере выше, он может сделать это, закрасив только три дополнительных клетки (они помечены символами ‘*’ на рисунке ниже).
Джону определить минимальное количество клеток, которые нужно закрасить, чтобы объединить два участка в один.
Формат ввода
Строка 1: Два разделенных пробелом целых числа, N и M (1 ≤ N, M ≤ 50).
Строки 2..1+N: Каждая строка содержит строку из M символов 'X' и '.', указывающих состояние проводника.
Формат вывода
В единственной строке требуется вывести минимальное количество новых символов 'X', которые необходимо добавить.
Пример
Ввод Вывод
6 16
..XXX...
...XX...
.XXX..
...
XXX
3
Примечания
На рис. участки проводника показаны цифрами 1 и 2:
Три дополнительных символа ‘X’ объединяют участки в один.
Однако не все так просто. Если посмотреть на израильские древние языки, то написание цифр там, как ни странно, совершенно не такое, к какому мы привыкли. Их цифры представляют из себя завитушки и крючёчки, и только их цифра «9″ чуть-чуть смахивает на нашу девятку.
Так кто же тогда придумал арабские цифры? На самом деле, знакомые нам цифры (1, 2, 3, …, 9) придумали вовсе не арабские народы. Это написание пришло к нам из Индии. Именно индийские древние народы так обозначали цифры. Конечно, сегодня данное написание претерпело множество изменений, но именно в древней индийской письменности можно разглядеть похожие «закорючки» . Арабские цифры были придуманы в Древнем Востоке для того, чтобы людям было удобнее записывать сложные математические вычисления. Ведь тогда на территории Древнего Востока существовало большое количество научных и псевдонаучных школ.
Но почему тогда цифры названы арабскими? Оказывается, из Индии в Европу эти цифры принесли именно арабы. Однако напрашивается вопрос – почему же тогда арабы не оставили такое написание и себе?
Выражение - это любая комбинация операндов или элементов данных (чисел, констант, переменных, функций и других операндов) и знаков операций. Операнды (operands) в программировании - это объекты, над которыми выполняют определенные действия (операции). Операнд представляет собой некоторую величину, обрабатываемую в программе.
Операции
К операциям, которые используются для записи выражений относят: операции присваивания; математические операции; логические операции; операции сравнения (отношений); операции для работы со строками (строковые операции).