#P1051. P,MTHBGWB
P,MTHBGWB
描述
摩尔斯电码将字符表示为长度可变的点和划序列。在实际应用中,消息中的字符由短暂的停顿分隔。以下表格展示了摩尔斯电码序列:
A | .- | H | .... | O | --- | V | ...- |
B | -... | I | .. | P | .--. | W | .-- |
C | -.-. | J | .--- | Q | --.- | X | -..- |
D | -.. | K | -.- | R | .-. | Y | -.-- |
E | . | L | .-.. | S | ... | Z | --.. |
F | ..-. | M | -- | T | - | ||
G | --. | N | -. | U | ..- |
注意,有四种点划组合未被指定。对于本题,我们将它们指定如下(这些并非实际摩尔斯电码的指定):
下划线 | ..-- | 句号 | ---. |
逗号 | .-.- | 问号 | ---- |
因此,消息 “ACM_GREATER_NY_REGION” 编码为:
.- -.-. -- ..-- --. .-. . .- - . .-. ..-- -. -.-- ..-- .-. . --. .. --- -.
M.E. 奥哈弗提出了一种基于损坏摩尔斯电码的加密方案。她的方案用一个字符串替换字母之间的停顿,这种停顿是必要的,因为摩尔斯电码是一种非前缀自由的可变长度编码,这个字符串标识了每个编码中点和划的数量。例如,考虑消息 “.--.-.--”。如果不知道停顿应该在哪里,它可能是 “ACM”、“ANK” 或其他几种可能性。然而,如果我们添加长度信息,即 “.--.-.--242”,那么编码就明确了。
奥哈弗的方案有三个步骤,加密和解密的步骤相同:
- 将文本转换为没有停顿的摩尔斯电码,但使用一个数字字符串来指示编码长度
- 反转数字字符串
- 使用反转后的数字字符串作为编码长度,将点和划转换回文本
例如,考虑加密后的消息 “AKADTOF_IBOETATUK_IJN”。转换为带有长度字符串的摩尔斯电码后得到 “.--.-.--..----..-...--..-...---.-.--..--.-..--...----.232313442431121334242”。反转数字并解码后得到原始消息 “ACM_GREATER_NY_REGION”。
输入
本题要求你实现奥哈弗的编码算法。输入由若干个用奥哈弗算法编码的消息组成。输入的第一行是一个整数 $n$,它指定了测试用例的数量。接下来的 $n$ 行每行包含一个消息。每个消息只使用二十六个大写字母、下划线、逗号、句号和问号。消息长度不超过 100 个字符。
输出
对于输入中的每个消息,输出行号(从第一列开始)、一个冒号、一个空格,然后是解码后的消息。必须严格遵守输出格式。
5
AKADTOF_IBOETATUK_IJN
PUEL
QEWOISE.EIVCAEFNRXTBELYTGD.
?EJHUT.TSMYGW?EJHOT
DSU.XFNCJEVE.OE_UJDXNO_YHU?VIDWDHPDJIKXZT?E
1: ACM_GREATER_NY_REGION
2: PERL
3: QUOTH_THE_RAVEN,_NEVERMORE.
4: TO_BE_OR_NOT_TO_BE?
5: THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG
来源
大纽约地区 2001 年