AT_tenka1_2013_qualA_e 天下一ジグソーパズル

题目描述

天下一程序员竞赛的黑白海报被高桥君恶作剧地拆散了。 海报原本是由 $H \times W$ 个正方形瓷砖,按 $H$ 行 $W$ 列排成的长方形组成的,但被高桥君拆解成了全部由 4 个瓷砖组成的“ト”字型拼块。 幸运的是,原始的数字数据还保留着,但遗憾的是,没有多余的纸张可以重新打印。 无奈之下,你需要用这些拼块来修复海报。 输入以如下格式从标准输入给出。 > 第 $1$ 行给出海报的高度 $H$ 和宽度 $W$($4 \leq H,W \leq 12$),以空格分隔,均为整数。 > $H$ 和 $W$ 都能被 $4$ 整除。 > 第 $2$ 行到第 $H+1$ 行,每行给出一个长度为 $W$ 的字符串 $S_i$,表示原始海报。字符串的第 $j$ 个字符表示左上角为 $(1,1)$ 的坐标 $(j,i)$ 处瓷砖的颜色。'#' 表示黑色瓷砖,'.' 表示白色瓷砖。 > 第 $H+2$ 行给出拼块的数量 $N$。 > 第 $H+3$ 行到第 $H+2+N$ 行,每行给出一个整数 $P_i$($1 \leq P_i \leq 16$),表示给定的拼块图案类型。拼块类型共有如下 16 种: ``` . # . # . # . # . # . # . # . # .. .. #. #. .# .# ## ## .. .. #. #. .# .# ## ## . . . . . . . . # # # # # # # # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ``` - 若 $H,W \leq 4$ 的输入正确,将获得满分 $150$ 分中的 $30$ 分。 - 若 $H,W \leq 8$ 的输入正确,将额外获得 $50$ 分。 请输出 $n$ 行,描述修复拼图的方法。如果无法还原海报,则输出 -1。 第 $i$ 行请输出 $P_i$ 应放置的 $X$ 坐标、$Y$ 坐标、旋转方向,三者以空格分隔。旋转方向如图所示,左上角坐标为 $(1,1)$,输出的是下图中 A 位置的坐标。 ``` A DBA D BC C CB C D A ABD 0 1 2 3 ``` 每行末尾需换行。如果有多种答案,输出任意一种均可。 例如: ``` 4 4 #... .#.. ..## ..## 4 9 6 1 8 ``` 输出: ``` 1 4 3 1 1 0 4 1 1 4 4 2 ``` 如图所示,可以还原原始海报。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_tenka1_2013_qualA_e/9679bde5561ce2148ffc33728f9e8c1ceab2f0b5.png) 图 1:还原后的海报 再如: ``` 4 4 #... .#.. ..## ..## 4 1 2 3 4 ``` 输出: ``` -1 ``` 若无法用给定拼块还原原始海报,则输出 -1。

输入格式

第 1 行:两个整数 $H$ 和 $W$,以空格分隔。 第 2 行到第 $H+1$ 行:每行一个长度为 $W$ 的字符串 $S_i$,表示原始海报。 第 $H+2$ 行:一个整数 $N$。 第 $H+3$ 行到第 $H+2+N$ 行:每行一个整数 $P_i$,表示拼块的类型。

输出格式

如果可以还原海报,则输出 $N$ 行,每行三个整数 $X\ Y\ R$,分别表示第 $i$ 个拼块的左上角坐标 $(X,Y)$ 和旋转方向 $R$($0$ 到 $3$,顺时针旋转 $90$ 度的次数),以空格分隔。 如果无法还原,则输出 -1。

说明/提示

- $H$ 和 $W$ 均为 $4$ 的倍数。 - $1 \leq H,W \leq 12$。 - $N = H \times W / 4$。 - 拼块的类型和旋转方式如题面所示。 - 若有多种答案,输出任意一种均可。 - 若无法还原,输出 -1。 由 ChatGPT 4.1 翻译