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

简介: 【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】 很高兴认识你!加入我们共同进步!

目录
相关文章
|
3月前
蓝桥备战--纪念品分组OJ532,贪心证明
蓝桥备战--纪念品分组OJ532,贪心证明
14 0
PTA 7-2 找奇葩 (20 分)
在一个长度为 n 的正整数序列中,所有的奇数都出现了偶数次,只有一个奇葩奇数出现了奇数次。你的任务就是找出这个奇葩。
78 0
|
10月前
|
C语言 C++
PTA团体程序设计天梯赛-练习集: L1-050 倒数第N个字符串 ( 15分 )
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。 输入格式: 输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤105)。 输出格式: 在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。 输入样例:
125 0
|
Java C语言 C++
【蓝桥杯基础题】2020年省赛填空题—既约分数
【蓝桥杯基础题】2020年省赛填空题—既约分数
101 0
【蓝桥杯基础题】2020年省赛填空题—既约分数
|
算法
算法题每日一练---第24天:海盗分金币
5 个海盗,相约进行一次帆船比赛。比赛中天气发生突变,他们被冲散了。
205 0
算法题每日一练---第24天:海盗分金币
|
机器学习/深度学习 人工智能
PTA 7-3 拼题 A 是真爱 (20 分)
如果一个人在一段话里很多次提到 pintia,那对拼题 A 就是真爱啦~ 本题就请你检查一下给定的文字中出现了几次 pintia。
97 0
|
测试技术
PTA 7-1 祖传好运 (15 分)
我们首先定义 0 到 9 都是好运数,然后从某个好运数开始,持续在其右边添加数字,形成新的数字。
95 0
|
存储 算法 调度
【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码
【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码
351 0
牛客练习赛71——回文数(模拟+细节)
牛客练习赛71——回文数(模拟+细节)
58 0
|
测试技术
1001 害死人不偿命的(3n+1)猜想 (15 分)
1001 害死人不偿命的(3n+1)猜想 (15 分)
52 0