11:潜伏者
个人感觉这道题在字符串里面算是一个比较综合比较难的题目了
对于选手的数据查找能力有很强的要求
我在做这道题时运用了桶排的思想
不多说了,看代码吧,全网最简
11:潜伏者
总时间限制: 1000ms 内存限制: 65536kB描述
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:
AA
AB
EOWIE
样例 #2:
QWERTYUIOPLKJHGFDSAZXCVBN
ABCDEFGHIJKLMNOPQRSTUVWXY
DSLIEWO
样例 #3:
MSRTZCJKPFLQYVAWBINXUEDGHOOILSMIJFRCOPPQCEUNYDUMPP
YIZSDWAHLNOVFUCERKJXQMGTBPPKOIYKANZWPLLVWMQJFGQYLL
FLSO
样例输出
样例 #1:
Failed
样例#2:
Failed
样例#3:
NOIP
提示输入输出样例1说明:原信息中的字母‘A’和‘B’对应相同的密字,输出“Failed”。 输入输出样例2说明:字母‘Z’在原信息中没有出现,输出“Failed”。来源NOIP2009复赛 提高组 第一题
1 /*
2 AA 密文 QWERTYUIOPLKJHGFDSAZXCVBN
3 AB 明文 ABCDEFGHIJKLMNOPQRSTUVWXY
4 EOWIE 需要翻译的加密信息 DSLIEWO
5 */
6 #include<iostream>
7 #include<cstdio>
8 #include<cstring>
9 using namespace std;
10 char ming[100001];//掌握的明文
11 char mi[100001];//掌握的密文
12 char a[100001];//需要被解密的信息
13 char zd[100001];//密文字典。桶
14 char find_zm[10001];//查找是否二十六个字母都出现过
15 int main()
16 {
17 scanf("%s",&mi);
18 scanf("%s",&ming);
19 scanf("%s",&a);
20 int l=strlen(mi);//字典的长度
21 int la=strlen(a);//密文的长度
22 for(int i=0;i<=l;i++)
23 {
24 if((zd[(int)mi[i]]==0)||(zd[(int)mi[i]]==ming[i]))
25 zd[(int)mi[i]]=ming[i]; //zd[密文]=对应的明文
26 else
27 {
28 cout<<"Failed";
29 return 0;
30 }
31 }//寻找是否有明文密文冲突
32 for(int i=0;i<=l;i++)
33 {
34 find_zm[(int)ming[i]]++;//出现了一个字母
35 }
36 for(int i=65;i<=90;i++)
37 {
38 if(find_zm[i]==0)
39 {
40 cout<<"Failed";
41 return 0;
42 }
43 }//判断是否某个字母未出现
44 for(int i=0;i<la;i++)
45 {
46 a[i]=zd[(int)a[i]];
47 }
48 puts(a);
49 //int s=sizeof(zd);
50 return 0;
51 }
- 【Scikit-Learn 中文文档】双聚类 - 无监督学习 - 用户指南 | ApacheCN
- ASP.NET MVC的客户端验证:jQuery的验证
- RxJava系列一
- ASP.NET MVC涉及到的5个同步与异步,你是否傻傻分不清楚?[上篇]
- 被遗忘的软件产品形态
- 区块链是什么,一文给您讲清楚
- ASP.NET MVC涉及到的5个同步与异步,你是否傻傻分不清楚?[下篇]
- 2017科技颠覆生活哪家强?
- 柯洁宣布复出,再次迎战AI!但对手不再是阿尔法狗……
- 【Scikit-Learn 中文文档】协方差估计 / 经验协方差 / 收敛协方差 / 稀疏逆协方差 / Robust 协方差估计 - 无监督学习 - 用户指南 | ApacheCN
- 先搞懂这八大基础概念,再谈机器学习入门!
- 人工智能化的传感器技术
- 带有CSS3的动画3D条形图
- 有故事的微信小游戏“跳一跳”
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 万恶的NPE差点让我半个月工资没了
- R语言非参数模型厘定保险费率:局部回归、广义相加模型GAM、样条回归
- 大白话java多线程,高手勿入
- R语言小数定律的保险业应用:泊松分布模拟索赔次数
- R语言中自编基尼系数的CART回归决策树的实现
- ArrayList的删除姿势你都掌握了吗
- sas神经网络:构建人工神经网络模型来识别垃圾邮件
- R语言多分类logistic逻辑回归模型在混合分布模拟单个风险损失值评估的应用
- 10分钟带你入门git到github
- 微服务[学成在线] day18:基于oauth2实现RBAC认证授权、微服务间认证实现
- 【TBase开源版测评】分布式事务全局一致性
- R语言进阶之主成分分析
- 二胖写参数校验的坎坷之路
- 图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
- R语言时间序列数据指数平滑法分析交互式动态可视化