bzoj#P3960. [WF2011]Ancient Messages

[WF2011]Ancient Messages

题目描述

为了了解早期文明,考古学家们经常会研究古代语言的书籍。有这样一种语言,它在 30003000 多年前古老的埃及曾经被使用,是一种基于象形符号的语言。图 11 表示了六种象形符号以及它们的名字。在这个问题中,你需要写一个程序去辨识这 66 个字符。

输入格式

输入包括多组测试用例,每一组都描述了一个图像,这个图像包含一或多个从图 11 中选出的象形符号。

这些图像以这样的方式给出:一系列黑色像素(用 11 表示)和白色像素(用 00 表示)组成的扫描线。

在输入数据中,每个扫描线都是用十六进制的方法进行编码的。例如,八个像素的序列 10011100(一个黑色像素,后面跟着两个白色像素,等等)可以表示为十六进制数字 9c。在十六进制中,只会出现数字和小写字母 af

每个测试用例的第一行包含两个整数,h,wh,whh 是图像中扫描线的个数, 是每一行十六进制的字符数。接下来的 hh 行从上到下给出了十六进制编码扫描线。

输入的图像遵循以下规则:

  • 图像仅包含图 11 所示的象形文字;

  • 每个图像至少有一个有效的象形文字;

  • 每个黑色像素都是一个有效象形文字的一部分;

  • 每个象形文字由一个联通的黑色像素块组成,对于每个黑色像素,至少在其上下左右至少有一块黑色像素块;

  • 象形文字互不接触,而且不存在一个象形文字在另一个的内部;

  • 如果有两块黑色像素对角线相接处,则必然存在一块公共接触的黑色像素;

  • 象形文字可能会扭曲,但是它的拓扑结构必然会和图 11 中所示的一个等价。(如果一个图像可以通过拉伸但不被毁坏的方式转化成另一个,则它们是拓扑等价的)。

最后一组测试用例后紧跟一行,包含两个0,表示输入结束。

输出格式

对于每组测试用例,先输出它的编号,后面跟着一个字符串,表示每一个出现在图像中的象形文字,使用下面的编码:

Ankh: A
Wedjat: J
Djed: D
Scarab: S
Was: W
Akhet: K

对于每个输出的字符串,字符要按照字典序输出。请参照输出样例的格式。

输入样例包含图 33 所示的测试点。由于空间的限制,样例数据并没有显示完全。

100 25
0000000000000000000000000
0000000000000000000000000
...(省略50行)...
00001fe0000000000007c0000
00003fe0000000000007c0000
...(省略44行)...
0000000000000000000000000
0000000000000000000000000
150 38
00000000000000000000000000000000000000
00000000000000000000000000000000000000
...(省略75行)...
0000000003fffffffffffffffff00000000000
0000000003fffffffffffffffff00000000000
...(省略69行)...
00000000000000000000000000000000000000
00000000000000000000000000000000000000
0 0
Case 1: AKW
Case 2: AAAAA

数据规模与约定

对于 100%100\% 的数据,1h2001\leq h\leq 2001w501\leq w\leq 50