P3693 琪露诺的冰雪小屋
题目背景
琪露诺有一片正方形的雪地,她想在上面盖一栋小冰屋。
题目描述
琪露诺偶然间得到了一片 $N\times N$ 大小的正方形的雪地,她想在上面盖一栋冰雪小屋。
但调皮的⑨才不会认真地收集冰块呢,她要在这片土地上使用冰雪弹幕来制造冰砖,然后一块一块地搭起一个房子。
琪露诺制造冰砖的方式是这样的:她会站在某个方格上,然后向上,下,左,右,左上,左下,右上,右下这八个方向之一发射强力的冰雪弹幕,弹幕能影响到该方向一条直线上一定的距离以内的所有方格。
地面的每个方格都有一个冷冻度,初始为 $0$。被冰雪弹幕影响一次,冷冻度 $+1$,冷冻度的上限为 $4$。
在发射弹幕的间隙中,琪露诺会来到所有冷冻度为 $4$ 的格子,把那里的雪堆到一起,制作一个冰砖(大小为 $1\times1\times1$ 方格),并且将冷冻度重新归零。
琪露诺会拿着这些冰砖来盖房子。这个房子的长度、宽度和坐落位置她在一开始就已经规划好了,但她并不愿意提早确定房子的高度。
琪露诺是这样计划的:这个房子外观上看起来是一个长方体。
她会先盖起这个房子的四面墙(厚度为 $1$ 个方格),并在贴近地面的位置(废话)留一个宽度和高度分别为 $1$ 和 $2$ 的空位不放冰砖,作为房门。(显然,门无法开在墙的拐角处,但可以紧贴拐角)。
在她喜欢的时候,她会结束四面墙的建造,并一次性在墙顶部盖上一个厚度为 $1$ 方格的屋顶,使房子成为一个空心有顶的长方体。
计划已经非常充分了,但琪露诺还是不放心,所以她想请你帮她写一个程序,来随时提醒着她别出什么差错。这个程序需要具备的功能将在下文详细介绍。
----------------------
雪地由 $N$ 行 $N$ 列,$N\times N$ 个方格组成。(下标从 $0$ 开始,也就是说,存在第 $0$ 行第 $0$ 列,但不存在第 $N$ 行第 $N$ 列)每个方格都有一个冷冻度,范围 $[0,4]$,初始为 $0$。注意,空间是三维的,而冷冻度只是地面的属性。
琪露诺想将房子的左上角放在第 $H_R$行,$H_C$ 列(外墙也是房子的一部分,因此左上角位置不应该是房子的内部,而是外墙,并且是墙的拐角)。
这个房子的长度(平行于每列)是 $H_X$,宽度(平行于每行)是 $H_Y$,包含墙。保证房子所占空间不会超出雪地的范围。
除了最后搭建屋顶,琪露诺只会在高度 $[0,H_M-1]$ 放置冰砖。
一开始,琪露诺一个冰砖也没有。
在以下的介绍中,我们用俯视图来作示意:
```plain
0000
0000
4x90
0x01
```
数字代表当前该格子的冷冻度。如果位置紧贴地面(高度为 $0$)的地方放上了冰砖,那么用字母 $x$ 表示。
如果紧贴地面的位置没有冰砖,但是位置正上方的高空存在冰砖,那么仍然用数字表示地面的冷冻度,但这个数字会增加 $5$。即如果在示意图中看到了一个数字 $t\ge5$,表示该位置地面是空的,但高处有冰砖,且地面的冷冻度为 $t-5$。
第一个操作:`ICE_BARRAGE R C D S`
---------------
表示琪露诺站在第 $R$ 行 $C$ 列的位置,朝着方向 $D$ 发射了一个强度为 $S$ 的弹幕。
$R,C,D,S\in\mathbf{Z},0\le D\le7,0\le R,C,S
输入格式
无
输出格式
无
说明/提示
共分为 $6$ 个 **Subtask**,每个 **Subtask** 的数据都满足一定条件,并且同时满足序号更大的 **Subtask** 的条件。
如 **Subtask #0** 同时满足 **Subtask #0~5** 的条件。
每一个 **Subtask** 的得分取所有测试点的最低分。
**Subtask #0** $20\%$
琪露诺只想玩玩冰雪弹幕,她不会放置任何冰砖,也不会盖房子(即只有操作一和操作二)。
**Subtask #1** $10\%$
琪露诺不会移除已经放置的冰砖。
**Subtask #2** $20\%$
琪露诺很有信心,她将在没有 `MAKE_ROOF` 的情况下建造她的冰屋(这种情况下,放置方块的高度仍然会小于 $H_M$ 且没有 `MAKE_ROOF` 操作)。
**Subtask #3** $20\%$
琪露诺在移除方块时会谨慎考虑,不会造成任何冰砖摔落。`MAKE_ROOF` 操作移除多余冰砖时,也不会造成屋顶塌陷。
**Subtask #4** $20\%$
琪露诺不喜欢把门开到四角的柱子旁边(数据保证在所有可能作为门的墙壁空缺中,有一种可能使得门不紧贴四角的柱子)。
**Subtask #5** $10\%$
$4\le N\le 16$,$5\le H_M\le 20$,$10\le M\le 10^3$,保证不属于冰屋范围内的所有空地至多构成一个连通块。
注意:判断墙壁是否有残缺时,候选的开门位如果被方块堵住,在当时还未被清空。"能看到残缺"以当时的情况作为判断依据。