CF105D Entertaining Geodetics
题目描述
游戏中的地图被划分为称为 Geo Panels 的方格单元。其中一些单元被涂上了颜色。我们假设没有颜色的 Geo Panels 被涂成透明色。
此外,地图上还有所谓的 Geo Symbols。它们看起来像不同颜色的金字塔(包括透明色的 Geo Symbols)。每个 Geo Symbol 位于一个 Geo Panel 上,每个 Geo Panel 最多只能包含一个 Geo Symbol。
Geo Symbol 可以被消除。为了更好地理解消除 Geo Symbol 时会发生什么,我们引入一个队列,用于存放最近被消除的 Geo Symbol。
我们将刚刚被消除的 Geo Symbol 放在队列的头部。接下来,我们重复以下操作:
从队列中取出一个 Geo Symbol。查看该 Geo Symbol 所在面板的颜色。如果该颜色既不是透明色,也不同于 Geo Symbol 的颜色,则将所有该颜色的 Geo Panels 重新涂成该 Geo Symbol 的颜色(透明色的 Geo Symbol 会将 Geo Panels 涂成透明色)。重新涂色的顺序严格按照如下无限螺旋顺序,从包含该 Geo Symbol 的面板开始:

换句话说,我们选出所有需要被重新涂色的面板,并找到它们在以该 Geo Symbol 位置为中心的无限螺旋中的编号。之后,按照编号递增的顺序依次重新涂色。
如果某个面板上有另一个 Geo Symbol,并且该面板正在被重新涂色,则该 Geo Symbol 会从地图上移除,并被放到队列的尾部。
重新涂色后,该 Geo Symbol 被彻底消除,然后从队列头部取下一个 Geo Symbol(如果有的话),重复上述过程。若队列为空,则过程结束。
请参考样例分析以便更好地理解。
你已知所有 Geo Panels 的颜色和所有 Geo Symbols 的位置。请你计算,如果消除某个 Geo Symbol,总共会发生多少次重新涂色操作。
输入格式
第一行包含两个整数 $n$ 和 $m$($1 \leq n, m \leq 300$),表示地图的高度和宽度(以单元格为单位)。
接下来 $n$ 行,每行包含 $m$ 个数字,表示 Geo Panels 的颜色。
再接下来 $n$ 行,每行包含 $m$ 个数字,表示 Geo Symbols 的分布。$-1$ 表示该位置没有 Geo Symbol,否则该数字表示该位置 Geo Symbol 的颜色。
所有颜色均为 $0$ 到 $10^9$ 之间的整数。$0$ 表示透明色。
最后一行包含两个整数 $x$ 和 $y$($1 \leq x \leq n$,$1 \leq y \leq m$),表示需要消除的 Geo Symbol 的行和列。行从上到下编号,列从左到右编号,坐标从 1 开始。保证 $(x, y)$ 位置上有一个 Geo Symbol。
输出格式
输出一个整数,表示消除该 Geo Symbol 后总共发生的重新涂色次数。
请不要在 C++ 中使用 %lld 格式符进行 64 位整数的输入输出。推荐使用 cout 流(也可以使用 %I64d 格式符)。
说明/提示
你可以在下图中看到样例的所有操作过程:

如果你的浏览器不支持 APNG,只显示静态图片,你可以通过以下链接查看 GIF 版本的动画效果:http://assets.codeforces.com/images/geo\_slow.gif
由 ChatGPT 4.1 翻译