【NOI】题目: 潜伏者(9分原因)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 【NOI】题目: 潜伏者(9分原因)

原题:http://noi.openjudge.cn/ch0107/11/

做了4次,这里把错误记录一下:

第一次出错:有点蠢,把最后result的长度敲成了第一行、第二行的长度

第二次及之后出错:一直是9分的原因:看了大神的说法:

1. ABCDEFGHIJKLMNOPQRSTUVWXYZ
2. BCDEFGHIJKLMNOPQRSTUVWXYZB
3. AZB

其实也挺蠢的,就是密字《-》字母是一一对应的关系,而 我之前只保证了一个密字对应一个字母【也可以是一个字母对应一个密字】,但是却没保证不同的密字不能对应同一个字母即错误答案:密字  对应一个》字母  or  字母   对应一个》密字---正确答案: 密字   《对应一个》  字母


1. #include <iostream>
2. #include<stdio.h>
3. #include<cstring>
4. using namespace std;
5. 
6. int main()
7. {
8.     //输入加密信息
9.     char strs[105];
10.     cin>>strs;
11.     strcat(strs,"\0");
12.     //输入 原信息
13.     char stro[105];
14.     cin>>stro;
15.     strcat(stro,"\0");
16. 
17.     //输入需要翻译的信息
18.     char strt[105];
19.     cin>>strt;
20.     strcat(strt,"\0");
21. 
22.     char cores['Z'-'A'+1][1];//对应密字
23.     int alp[26];//保证密字-字母唯一
24.     //初始化
25.     for(int i=0;i<'Z'-'A'+1;i++)
26.     {
27.         cores[i][0]='\0';
28.         alp[i]=0;
29.     }
30. 
31.     //通过加密信息获取相应的密字
32.     int strlength=strlen(strs);
33.     for(int j=0;j<strlength;j++)
34.     {
35.         if(cores[strs[j]-'A'][0] == '\0')//只能保证一个字母对应一个密字,但不能保证唯一
36.         {
37.             if(alp[stro[j]-'A']==0)//保证密字-字母唯一
38.             {
39.                 cores[strs[j]-'A'][0]=stro[j];
40.                 alp[stro[j]-'A']++;
41.             }else{
42.                 cout<<"Failed";
43.                 return 0;
44.             }
45. 
46.         }else if(cores[strs[j]-'A'][0]==stro[j])
47.         {
48.                 continue;
49.         }else{//扫描中发现掌握的信息里有明显的自相矛盾或错误(违反S过密码的编码规则)。例如某条信息“XYZ”被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。
50.             cout<<"Failed";
51.             return 0;
52.         }
53.     }
54. 
55.     for(int i=0;i<'Z'-'A'+1;i++)
56.     {
57.         if(cores[i][0]=='\0')
58.         {
59.             cout<<"Failed";//所有信息扫描完毕,但发现存在某个(或某些)字母在原信息中没有出现。
60.             return 0;
61.         }
62.     }
63. 
64.     char result[105];
65.     for(int i=0;i<strlen(strt);i++)
66.     {
67.         result[i]=cores[strt[i]-'A'][0];
68.     }
69. 
70.     result[strlen(strt)]='\0';
71.     cout<<result;
72. 
73.     return 0;
74. }

描述

R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。

历经艰险后,潜伏于S国的R国间谍小C终于摸清了S国军用密码的编码规则:

1、    S国军方内部欲发送的原信息经过加密后在网络上发送,原信息的内容与加密后所的内容均由大写字母‘A’—‘Z’构成(无空格等其他字母)。

2、    S国对于每个字母规定了对应的“密字”。加密的过程就是将原信息中的所有字母替换为其对应的“密字”。

3、    每个字母只对应一个唯一的“密字”,不同的字母对应不同的“密字”。“密字”可以和原字母相同。

例如,若规定‘A’的密字为‘A’,‘B’的密字为‘C’(其他字母及密字略),则原信息“ABA”被加密为“ACA”。

现在,小C通过内线掌握了S国网络上发送的一条加密信息及其对应的原信息。小C希望能通过这条信息,破译S国的军用密码。小C的破译过程是这样的:扫描原信息,对于原信息中的字母x(代表任一大写字母),找到其在加密信息中的对应大写字母y,并认为在密码里y是x的密字。如此进行下去直到停止于如下的某个状态:

1、    所有信息扫描完毕,‘A’—‘Z’所有26个字母在原信息中均出现过并获得了相应的“密字”。

2、    所有信息扫描完毕,但发现存在某个(或某些)字母在原信息中没有出现。

3、    扫描中发现掌握的信息里有明显的自相矛盾或错误(违反S过密码的编码规则)。例如某条信息“XYZ”被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。

在小C忙得头昏脑胀之际,R国司令部又发来电报,要求他翻译另外一条从S国刚刚截取到的加密信息。现在请你帮助小C:通过内线掌握的信息,尝试破译密码。然后利用破译的密码,翻译电报中的加密信息。

输入

共3行,每行为一个长度在1到100之间的字符串。

第1行为小C掌握的一条加密信息。

第2行为第1行的加密信息所对应的原信息。

第3行为R国司令部要求小C翻译的加密信息。

输入数据保证所有字符串仅由大写字母‘A’—‘Z’构成,且第1行长度与第2行相等。

输出

共1行。

若破译密码停止时出现2,3两种情况,请你输出“Failed”(不含引号,注意首字母大写,其它小写)。

否则请输出利用密码翻译电报中加密信息后得到的原信息。

样例输入

1. 样例 #1:
2. AA
3. AB
4. EOWIE
5. 
6. 样例 #2:
7. QWERTYUIOPLKJHGFDSAZXCVBN
8. ABCDEFGHIJKLMNOPQRSTUVWXY
9. DSLIEWO
10. 
11. 样例 #3:
12. MSRTZCJKPFLQYVAWBINXUEDGHOOILSMIJFRCOPPQCEUNYDUMPP
13. YIZSDWAHLNOVFUCERKJXQMGTBPPKOIYKANZWPLLVWMQJFGQYLL
14. FLSO

样例输出

1. 样例 #1:
2. Failed
3. 
4. 样例#2:
5. Failed
6. 
7. 样例#3:
8. NOIP

提示

输入输出样例1说明:原信息中的字母‘A’和‘B’对应相同的密字,输出“Failed”。


输入输出样例2说明:字母‘Z’在原信息中没有出现,输出“Failed”。


AIEarth是一个由众多领域内专家博主共同打造的学术平台,旨在建设一个拥抱智慧未来的学术殿堂!【平台地址:https://devpress.csdn.net/aiearth】 很高兴认识你!加入我们共同进步!

目录
相关文章
|
5月前
[NOIP2002]过河卒 标准递归
[NOIP2002]过河卒 标准递归
39 6
|
6月前
蓝桥备战--纪念品分组OJ532,贪心证明
蓝桥备战--纪念品分组OJ532,贪心证明
28 0
|
算法
算法题每日一练---第24天:海盗分金币
5 个海盗,相约进行一次帆船比赛。比赛中天气发生突变,他们被冲散了。
273 0
算法题每日一练---第24天:海盗分金币
|
Java C语言 C++
【蓝桥杯基础题】2020年省赛填空题—既约分数
【蓝桥杯基础题】2020年省赛填空题—既约分数
【蓝桥杯基础题】2020年省赛填空题—既约分数
|
算法
【递归与递推】洛谷[NOIP2002 普及组] 过河卒
前言 本题来自洛谷P1002. 题目链接:[NOIP2002 普及组] 过河卒 - 洛谷
222 0
蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:2.纪念日
蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:2.纪念日
137 0
蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:2.纪念日
|
测试技术
PTA 7-1 祖传好运 (15 分)
我们首先定义 0 到 9 都是好运数,然后从某个好运数开始,持续在其右边添加数字,形成新的数字。
134 0
|
测试技术 Windows
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)-2
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)
143 0
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)-2
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)-1
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)
184 0
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)-1