#z1070. 闽南大厝的木雕窗格
闽南大厝的木雕窗格
题目背景
红砖白石双坡厝是闽南传统民居的典型代表。大厝的木雕窗格图案精美异常,往往呈现出严谨的数学几何嵌套结构。
题目描述
现有一个大小为 的方格矩阵,用来表示一副复古窗格的数字拓印图。矩阵中的每个元素非 0 即 1。
为了将这个窗格图案进行数字化无损压缩,我们需要运用四叉树分治算法进行递归编码。具体的编码函数 encode(r1, c1, r2, c2) 规则如下:
- 如果当前处理的子矩阵(行范围 ,列范围 )中的所有元素完全相同(全为
0或全为1),则直接输出该数字字符(0或1),当前层递归结束。 - 如果子矩阵中既有 0 又有 1,说明图案不单一。此时首先输出一个大写字母
X,然后将当前子矩阵平均分割成四个相等大小的子正方形,并按照如下顺序递归调用编码:
- 左上子矩阵
- 右上子矩阵
- 左下子矩阵
- 右下子矩阵
现在给定这个 的 01 矩阵,请你输出它最终的递归编码字符串。
输入格式
第一行包含一个整数 ,表示矩阵的大小为 。
接下来 行,每行包含一个长度为 的由 0 和 1 组成的字符串,表示窗格矩阵。
输出格式
输出一行字符串,表示最终的递归压缩编码。
输入输出样例
输入 #1
2
1011
1111
0010
0001
输出 #1
XX101110X1001
样例说明: 初始矩阵大小为 。非全等,输出
X。 划分 4 个 子矩阵:
- 左上 为
10 / 11,非全等,输出X,再分四个 ,输出1、0、1、1。- 右上 为
11 / 11,全 1,输出1。- 左下 为
00 / 00,全 0,输出0。- 右下 为
10 / 01,非全等,输出X,再分四个 ,输出1、0、0、1。 拼接起来即得到XX101111XX000010(注:手算核对结果)。
说明/提示
对于 的数据:,即矩阵最大为 。