航行日志的修复(字符串)

作为CSU宇宙军事学院的全A优等生,你不负众望。在你的精确计算和指挥控制下,MACROSS凭借其主炮的强大威力,成功挫败了Zentraedi舰队一次又一次的进攻。指挥室和甲板上传来一阵又一阵的欢呼声,战事也渐趋平静。但就在格罗巴尔将军叼起了他爱用的烟斗,准备下达全舰修整的命令之时,MACROSS的背后突然产生了强烈的时空跳跃反应,大批飞弹迅猛飞来。幸好此刻洛伊·福克正率领统合军Skull大队在返回MACROSS的途中,成功阻拦了大部分飞弹,但还是有部分流弹击穿了装甲,控制室里传来急促的警报声。

此刻你正检查情报系统受损情况并执行修复任务。很幸运,并没有飞弹击穿情报室的装甲,但情报系统仍然出现了严重的紊乱情况,尤其是航行日志已经面目全非。由于航行日志记载着MACROSS战舰及其船员在航行过程中的各项情况,是舰队指挥官决策的一个重要依据,因此需要你立刻修复。

MACROSS的航行日志由自然语言记录,严格符合英文排版规范,每一行文本的末尾不会出现多余的空格。虽然除了英文字母外还可能会存在着标点符号和空格,但标点仅仅只有","和"."两种情形。经过和部分备份日志比对,你惊喜地发现情况并不是十分糟糕。尽管整体上字符的替换毫无规律,但对于英文字母来说,仅仅是向后移动固定位数的循环替换。然而这……似乎并没有多大帮助……

正当一筹莫展之时,一份英文字母频率表在你的眼前调皮的摆动。耳边随即传来那熟悉的银铃般的声音:“嘻嘻~这下你该怎么感谢我呀!”。

“咦,怎么是你?!”

The letter-frequency table on MACROSS

The letter-frequency table on MACROSS

Input

一份出现紊乱的航行日志文本。

Output

经过还原后的原始航行日志文本。

Sample Input
Xly`hld`mzcy`qcpp(`lyo`pgpcjhspcp`sp`td`ty`nsltyd}
Xlyj`l`zyp`mpwtpgpd`stxdpwq`esp`xldepc`zq`zespcd(
lyo`jpe`sp`td`l`rcplepc`dwlgp`esly`espj}
Szh`sld`estd`nslyrp`nzxp`lmzfe}`T`oz`yze`vyzh}
Hsle`nly`xlvp`te`wprtetxlep}`T`mpwtpgp`T`nly`dpeewp`estd`bfpdetzy}
Sample Output
Man was born free, and everywhere he is in chains.
Many a one believes himself the master of others,
and yet he is a greater slave than they.
How has this change come about. I do not know.
What can make it legitimate. I believe I can settle this question.
Hint

输入数据保证不超过100行,单行不超过1000个字符。

数据保证还原后的原始航行日志文本严格符合英文排版规范,且字母频率分布显著。

数据保证所有的拉丁字母只会替换为拉丁字母,标点和空格也只会替换为互不相同的特殊可显符号。

标点符号的处理需要你发挥曾经在CSU宇宙军事学院学习时的机智与大胆。


#include<iostream>
#include<math.h>
#include<stdio.h>
#include<algorithm>
using namespace std;

int main()
{
    string s;
    while(cin>>s)
    {
        int len=s.size();
        char ans[1010];
        for(int i=0; i<len; i++)
        {
            if(s[i]>='a'&&s[i]<='z'){
                if(s[i]-11>='a') ans[i]=s[i]-11;
                else ans[i]=s[i]-11+26;
            }
            if(s[i]>='A'&&s[i]<='Z'){
                if(s[i]-11>='A') ans[i]=s[i]-11;
                else ans[i]=s[i]-11+26;
            }
            if(s[i]=='`') ans[i]=' ';
            else if(s[i]=='}') ans[i]='.';
            else if(s[i]=='(') ans[i]=',';
        }
        for(int i=0; i<len; i++)
        {
            cout<<ans[i];
        }
        cout<<endl;
    }
}


猜你喜欢

转载自blog.csdn.net/xxxxxm1/article/details/80696694