#P1798. Dory's Phonebook

    ID: 799 远端评测题 3000ms 30MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>搜索搜索与剪枝DFS字符串Trie树TUD Programming Contest 2004DarmstadtGermany

Dory's Phonebook

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

描述

背景

多莉患有短期记忆丧失症。电话号码对她来说是最大的谜团之一。每当她想给她的朋友马林打电话时,她就会发现自己几乎记不起他的名字。因为单词不是那么难记住(她甚至会说外语),所以我们应该帮助她把电话号码转换成单词。

我们想要使用一种映射方式,用单词对电话号码进行编码,这样就能更容易记住这些号码。

问题

以下是从字母到数字的映射关系:

E JNQ RWX DSY FT AM CIV BKU LOP GHZ

e jnq rwx dsy ft am civ bku lop ghz

0 1 2 3 4 5 6 7 8 9

你的任务是编写一个程序,对于给定的电话号码,找到所有可能的用单词进行的编码,并按字母顺序/字典序打印出来。一个电话号码是由破折号“-”、斜杠“/”和数字组成的任意字符串。破折号和斜杠不会被编码。这些单词取自一个以 ASCII 文件形式给出的字典(每行一个单词)。每一个能够从这个字典中得到且与电话号码完全匹配的编码都应该被打印出来。字典中的单词包含字母(大写或小写)、破折号“-”和双引号“"”。在编码时只使用字母,但单词必须按照字典中给出的确切形式打印出来。字典中的单词不会以非字母开头。电话号码的编码可以由单个单词组成,也可以由多个用空格分隔的单词组成。

输入

第一行包含场景的数量。

每个场景都以一行开头,该行包含字典中单词的数量。接下来是字典中的单词,每行一个。然后是电话号码的数量,接下来每行一个电话号码。

字典中的所有单词和所有电话号码最多有 50 个字符。字典中单词的数量限制为 75000,每个场景中电话号码的数量少于 1000 个。

输出

对于每个场景,首先输出一行 “Scenario #i:”,其中 i 是从 1 开始的场景编号。然后你必须按照给定的顺序处理这些电话号码。对于每一个可能的编码,打印电话号码,后面跟着一个冒号、一个空格(!)以及编码,都在一行上;不允许有尾随空格。对于一个电话号码,按照字典序/字母顺序对不同的编码进行排序(这意味着基于字符的 ASCII 值进行排序,所以大小写是有区别的)。如果对于某个电话号码根本没有任何编码,打印该电话号码,后面跟着一个空格和字符串 “cannot be encoded.”。每个场景的输出以一个空行结束。

输入数据 1

2
12
an
Bo"
bo"s
da
je
jemand
mir
Mix
Mixer
so
Tor
Torf
4
112
5624-82
0721/608-4067
10/783--5
5
jrd
j
rd
jr
d
1
12312312312312312312312312312312312312312312399

输出数据 1

Scenario #1:
112 cannot be encoded.
5624-82: Mix Tor
5624-82: mir Tor
0721/608-4067 cannot be encoded.
10/783--5: je Bo" da

Scenario #2:
12312312312312312312312312312312312312312312399 cannot be encoded.

来源 2004 年德国达姆施塔特工业大学编程竞赛