#P2270. Quadtree II or: Florida Jones strikes back

Quadtree II or: Florida Jones strikes back

本题没有可用的提交语言。

描述

佛罗里达·琼斯意识到用四叉树编码的藏宝图是假的之后,心怀恶意地打算也给在他之后的下一个寻宝者开个恶作剧玩笑。但为此,他又一次需要你的帮助:

你能编写一个程序,读取一个 XBM 格式的图片,并使用四叉树方案对其进行编码吗?

输入

第一行将是 "#define quadtree_width nn",其中 nn 是图片的像素尺寸(图片是正方形的,为 n×nn \times n 像素)。

第二行相应地将是 "#define quadtree_height nn"。

第三行将是 "static char quadtree_bits[] = {"。

然后,会有 nn 行数据,每行对图片的一行像素进行编码。每行将有 n/8n/8 个十六进制数。

每个十六进制数由 8 位组成,从左到右对 8 个像素进行编码(其中最左边的位值为 1,最右边的位值为 128)。十六进制数以 0xdd 的形式打印,其中 d 是集合 { 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f } 中的一个字符。

例如:8 个像素 WBBBBWWB 被写成 0x9e。(2+4+8+16+128=158=0x9e2 + 4 + 8 + 16 + 128 = 158 = 0x9e

每个十六进制数后面跟一个逗号。

最后一行将是 "}"。

注意:示例输入中用 /* 和 */ 括起来的注释不是输入的一部分。它们是用来帮助解释 XBM 格式的。

输出

首先,单独打印一行整数 nn8n5128 \leq n \leq 512)。

然后,打印一个由字母 B、W 和 Q 组成的字符串,该字符串使用四叉树方案对图片进行了正确编码。

最后,用一个换行符结束该字符串。

输入数据 1

#define quadtree_width 16
#define quadtree_height 16
static char quadtree_bits[] = {
0xf0,0xf0,                       /* WWWWBBBB WWWWBBBB */
0xf0,0xf0,                       /* WWWWBBBB WWWWBBBB */
0xf0,0xf0,                       /* WWWWBBBB WWWWBBBB */
0xf0,0xf0,                       /* WWWWBBBB WWWWBBBB */
0x0f,0x0f,                       /* BBBBWWWW BBBBWWWW */
0x0f,0x0f,                       /* BBBBWWWW BBBBWWWW */
0x0f,0x0f,                       /* BBBBWWWW BBBBWWWW */
0x0f,0x0f,                       /* BBBBWWWW BBBBWWWW */
0xf0,0xf0,                       /* WWWWBBBB WWWWBBBB */
0xf0,0xf0,                       /* WWWWBBBB WWWWBBBB */
0xf0,0xf0,                       /* WWWWBBBB WWWWBBBB */
0xf0,0xf0,                       /* WWWWBBBB WWWWBBBB */
0x0f,0x0f,                       /* BBBBWWWW BBBBWWWW */
0x0f,0x0f,                       /* BBBBWWWW BBBBWWWW */
0x0f,0x0f,                       /* BBBBWWWW BBBBWWWW */
0x0f,0x0f,                       /* BBBBWWWW BBBBWWWW */
};

输出数据 1

16
QQWBBWQWBBWQWBBWQWBBW

提示

由于 “四叉树” 和 “四叉树 II” 这两个问题是相互逆的,你可以通过在各自的输入和输出文件之间来回转换来双重检查你的程序。

来源

乌尔姆本地赛 1999