Codeforces Beta Round 81 |
---|
Закончено |
Карты в игре разбиты на квадратные ячейки, которые называются гео-панелями. Некоторые из этих панелей окрашены. Будем считать, что гео-панели, которые не имеют цвета, покрашены в прозрачный цвет.
Еще на карте есть так называемые гео-символы. Они имеют вид цветных пирамидок (в том числе существуют гео-символы прозрачного цвета). Каждый гео-символ расположен на одной гео-панели, а на каждой гео-панели может находиться не более одного гео-символа.
Гео-символы можно уничтожать. Чтобы лучше понять что происходит при уничтожении гео-символов, заведем некую очередь, в которую будем складывать только что уничтоженные гео-символы.
В самом начале поместим в очередь только что уничтоженный гео-символ. Далее будем повторять следующую операцию:
Извлечем из начала очереди гео-символ. Посмотрим на цвет панели, на которой находился данный гео-символ. Если он отличен от прозрачного и отличен от цвета данного гео-символа, то происходит перекрашивание всех гео-панелей этого цвета в цвет данного гео-символ (в том числе, прозрачные гео-символы перекрашивают гео-панели в прозрачный цвет). Перекрашивание происходит по бесконечной спирали строго в следующем порядке, начиная от панели, на которой стоял гео-символ:
Другими словами, мы выбираем все панели, которые нужно перекрасить и находим их номера в бесконечной спирали, центр которой помещен в позицию данного гео-символа. После этого перекрашиваем их в порядке возрастания номеров.
Если в момент перекрашивания панели на ней находится еще один гео-символ, то он удаляется с карты и помещается в конец очереди.
После перекрашивания гео-символ уничтожается окончательно и из начала очереди извлекается следующий гео-символ (если он есть) и процесс повторяется. Процесс заканчивается если очередь оказалась пуста.
Чтобы лучше понять этот процесс — смотрите разбор примера.
Вам известны цвета всех гео-панелей и расположение всех гео-символов. Определите количество перекрашиваний, которое случится, если уничтожить один из гео-символов.
В первой строке находятся два целых числа n и m (1 ≤ n, m ≤ 300) — высота и ширина карты (в клетках).
Далее идут n строк по m чисел в каждой — цвета гео-панелей.
После этого идут еще n строк по m чисел в каждой — описание гео-символов. -1 означает, что в данной позиции нет гео-символа, иначе число означает цвет гео-символа в данной позиции.
Все цвета — целые числа в диапазоне от 0 до 109. 0 обозначает прозрачный цвет.
В последней строке находятся два целых числа x и y (1 ≤ x ≤ n, 1 ≤ y ≤ m) — номер строки и номер столбца, где находится гео-символ, который уничтожается первым. Строки нумеруются начиная с единицы сверху вниз, столбцы нумеруются начиная с единицы слева направо. Гарантируется, что в позиции с координатами (x, y) находится гео-символ.
Выведите одно целое число — общее количество перекрашиваний после уничтожения гео-символа.
Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).
5 5
9 0 1 1 0
0 0 3 2 0
1 1 1 3 0
1 1 1 3 0
0 1 2 0 3
-1 1 -1 3 -1
-1 -1 -1 0 -1
-1 -1 -1 -1 -1
-1 2 3 -1 -1
-1 -1 -1 -1 2
4 2
35
Все действия, происходящие в примере можно видеть на следующей картинке:
http://assets.codeforces.com/images/geo_slow.gif
Название |
---|