QOJ.ac

QOJ

Límite de tiempo: 30.0 s Límite de memoria: 256 MB Puntuación total: 100

#17458. 弱于预期

Estadísticas

Kitoshima 编程竞赛的委员会成员决定使用加密软件进行秘密通信。他们要求一家名为 Kodai Software 的公司开发一款基于高度复杂数学的加密软件。

根据关于 IT 项目的报告,许多项目都无法按时、按预算并具备所需的功能和特性交付。本案也是如此。Kodai Software 未能在约定的交付日期前实现该密码,并请求暂时使用一种采用替换密码的简化版本。委员会成员非常生气,并强烈要求交付完整规格的产品,但他们还是不情愿地决定暂时使用这款劣质产品。

在下文中,我们将加密前的文本称为明文(plaintext),加密后的文本称为密文(ciphertext)。

这种简单的密码会替换明文中的字母,其替换规则由一组字母对(pair)指定。一个字母对由两个字母组成,且是无序的,也就是说,字母对中字母的顺序无关紧要。字母对 (A, B) 和字母对 (B, A) 具有相同的含义。在一种替换规则中,一个字母最多只能出现在一个字母对中。当字母对中的某个字母出现在明文中时,该字母会被替换为该字母对中的另一个字母。未在任何字母对中指定的字母保持不变。

例如,使用替换规则 $\{(A, Z), (B, Y)\}$ 替换明文:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

会得到以下密文:

ZYCDEFGHIJKLMNOPQRSTUVWXBA

这可能对我们来说是一个巨大的机会,因为这种替换规则在破解面前显得非常脆弱。我们也许能够得知委员会成员之间的通信内容。这里的任务是开发一个解密程序,从给定的密文消息中找出明文消息。

密文消息由一个或多个密文单词组成。密文单词是通过某种替换规则从明文单词生成的。你拥有一个候选单词列表,其中包含了可能在明文中出现的单词;不会出现其他单词。列表中的某些单词实际上可能并没有在明文中被使用。

总是存在至少一种候选单词的序列,使得给定的密文可以通过某种替换规则从中获得。在某些情况下,可能无法从给定的密文和候选单词列表中唯一确定明文。

输入格式

输入由多个数据集组成,每个数据集包含一个密文消息和一个候选单词列表,格式如下:

$$n$$ $$word_1$$ $$\vdots$$ $$word_n$$ $$sequence$$

第一行中的 $n$ 是一个正整数,表示候选单词的数量。接下来的 $n$ 行中,每行表示一个候选单词。最后一行 $sequence$ 是由一个或多个密文单词组成的序列,单词之间用单个空格分隔,并以句点(.)结尾。

你可以认为每个 $sequence$ 中的字符数(包括空格和句点)大于 1 且小于或等于 80。列表中的候选单词数量 $n$ 不超过 20。单词中仅使用 26 个大写字母 A 到 Z,每个单词的长度在 1 到 20 之间(含边界)。

仅包含一个零的行表示输入结束。

输出格式

对于每个数据集,你的程序应该在单行中输出解密后的消息。输出行中相邻的两个单词应使用单个空格分隔,最后一个单词后应紧跟一个句点。当无法唯一确定明文时,输出行应为一个单连字符(-)后跟一个句点。

样例

输入样例 1

4
A
AND
CAT
DOG
Z XUW ZVX Z YZT.
2
AZ
AY
ZA.
2
AA
BB
CC.
16
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
ABCDEFGHIJKLMNO
A B C D E F G H I J K L M N O ABCDEFGHIJKLMNO.
0

输出样例 1

A DOG AND A CAT.
AZ.
-.
A B C D E F G H I J K L M N O ABCDEFGHIJKLMNO.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.