#P1617. Crypto Columns
Crypto Columns
描述
描述 列置换加密方案会使用一个关键字来打乱消息(或明文)中的字母顺序,如以下示例所示:假设关键字是 “BATBOY”,我们的消息是 “MEET ME BY THE OLD OAK TREE”。由于该关键字有 6 个字母,我们将这条消息(忽略空格和标点符号)写成一个有 6 列的网格形式,并根据需要用随机的额外字母进行填充:
MEETME
BYTHEO
LDOAKT
REENTH
在这里,我们用 “NTH” 对消息进行了填充。现在,消息按列输出,但列的输出顺序由关键字中的字母来决定。因为 “A” 是关键字中在字母表中排序最靠前的字母,所以第 2 列会首先输出。下一个字母 “B” 出现了两次。在这种出现并列情况时,我们先输出最左边的列,所以我们先输出第 1 列,然后是第 4 列。如此继续,按顺序输出其余的列,依次是第 5 列、第 3 列,最后是第 6 列。所以,在这种情况下,网格中各列的输出顺序是 2、1、4、5、3、6。这个输出结果被称为密文,在这个例子中,密文就是 “EYDEMBLRTHANMEKTETOEEOTH”。你的任务是在给定关键字和密文的情况下,还原出明文。
输入
会有多组输入数据。每组数据包含两行输入。第一行输入将是关键字,长度不超过 10 个字符,且全部由大写字母组成。第二行将是密文,长度不超过 100 个字符,且全部由大写字母组成。当关键字为 “THEEND” 时,表示输入结束,此时后面不会有密文。 输出 对于每组输入数据,输出一行包含明文(包含为填充而添加的任何字符)的内容。这一行不应包含空格,且全部由大写字母组成。
输入示例
plaintext
BATBOY
EYDEMBLRTHANMEKTETOEEOTH
HUMDING
EIAAHEBXOIFWEHRXONNAALRSUMNREDEXCTLFTVEXPEDARTAXNAARYIEX
THEEND
输出示例
plaintext
MEETMEBYTHEOLDOAKTREENTH
ONCEUPONATIMEINALANDFARFARAWAYTHERELIVEDTHREEBEA
RSXXXXXX
来源
2003 年美国中东部地区竞赛