情报破译-Cryptanalysis
总时间限制: 1000ms 内存限制: 65536kB
描述
A国和B国正在进行一场战争。A国通过间谍知道B国的情报加密规则为:
1. 仅对字母加密,其他符号保留(如空格,逗号等)
2. 对第i个单词(i从1开始)的加密方法是把第i个单词反转(如abc变成cba),然后对单词内的每个字母采用经典的Caesar加密法,循环后移i个字母。例如:第5个单词的加密表如下所示:
密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
- 单词的定义是:任何一串极大的连续字母串。
比如,样例输出第三行,第二个单词为ba,反转后为ab,a后移2个单词变成c,b后移两个单词变成d,故该单词加密后为cd(见样例输入第三行)。
现在A国又截获了一些B国的情报密文。请你帮A国破译出情报的内容。
输入
一共有不超过int范围行,每行为一个字符串(int范围)。注意,每行是可以以空格开头的。
输出
情报破译后得到的内容。每条情报对应输出一行。
样例输入
fiU umncv oolz ioex jhfqu, zg uh zqI nlaxO ockl yz kmpzgE.
fX gxcj , ghlsxffr cxmG K.
ab3cd
样例输出
The talks will take place, at an Air Force base on Sunday.
We have , occupied City F.
az3ba
【分析】字符串处理问题
该题综合了字符串加密解密、串的逆序和“单词”处理三部分内容。分以下三步进行:
1. 找极大连续字母串(单词),可设定两个”伪指针”sindex和eindex,[sindex, eindex)范围内的字符即找到的单词
2. 把找到的第i个单词反转(串的逆序,在这里处理的是单词)
3. 采用经典的Caesar加密法,根据表中规律完成解密