P7975 「Stoi2033」分裂
题目背景
> 趁时间没发觉 让我带着你离开
> 没有了证明 没有了空虚
> 基于两种立场我会罩着你
> 趁时间没发觉 让我带着你离开
> 这不是顽固 这不是逃避
> 没人绑着你走才快乐
> ——《分裂》
题目描述
有一个 $n \times m \times 2$ 的棋盒(四周为棋盒壁)与黑、红各 $nm$ 颗棋。棋子有若干种类,红色的一种棋子个数和黑色的该种棋子个数相等。棋子种类用特征值 $v_{i,j}$ 标记。特征值相同的棋子种类相同,特征值不同的棋子种类不同。红色棋子摆放在棋盒的下层,已经摆好。现在 Vinsta 要将黑棋按照规定顺序摆放在棋盒上层。设棋盒内坐标以左上角为 $(1,1)$,右下角为 $(n,m)$,依此第 $i$ 行第 $j$ 列为 $(i,j)$,则每颗摆进去的黑棋必须摆在满足以下要求的位置:
1. 其摆放位置没有黑棋子且下方为与其种类相同的红棋;
2. 在 1. 的要求下,若有多个,令一个位置的 **紧密度** 为其四边有黑棋子相邻或为棋盒壁的个数,则选择 **紧密度** 最大的一个;
3. 在 2. 的要求下,若还有多个,则设此位置的坐标为 $(i,j)$,要求 $i+j$ 最小;
4. 在 3. 的要求下,若还有多个,要求 $i$ 最小。
给出红棋的摆放情况和黑棋放入的顺序,她想请你帮忙求出每个位置的黑棋子被放入的顺序。
输入格式
第一行两个整数 $n,m$。
接下来 $n$ 行 $m$ 列,第 $i$ 行第 $j$ 列表示 $v_{i,j}$。
接下来一行 $nm$ 个整数,表示按顺序每次放入的棋子的种类。
输出格式
输出 $n$ 行 $m$ 列,每个位置上的数 $k_{i,j}$ 表示 $(i,j)$ 上的棋是第 $k_{i,j}$ 个被放进去的。
说明/提示
对于 $30\%$ 的数据,$1 \le n,m \le 70$;
对于另外 $30\%$ 的数据,$v_{i,j}=1$;
对于 $100\%$ 的数据,$1 \le n,m \le 10^3, 1 \le v_{i,j} \le 10$,保证每种棋子黑色与红色数量相等。