题目链接:https://www.luogu.org/problem/P1071

题意概括:给你一段原来截获的英文密码和与之对应的明文,如果密码表非F♂A法,输出"Failed" ,否则翻译现在给你的一句密文并输出。(所有字母均为大写)

有两种情况视为密码表非法:

1、 所有信息扫描完毕,但发现有字母在原信息中没有出现(密码表脱漏)。

2、 扫描中发现掌握的信息里有明显的自相矛盾或错误(密码表错乱)。

这道题主要思想可以利用数组打表,首先我们定义一个数组code作为密码表

然后进行密码表制作,比如一个密文是“DDYAKIOI”,明文是“SSDPOLKL”(首先声明一点,这只是为了便于理解写的短样例,这个样例实际上已经非法了)

可见code['D'](即code[68])为'S',code['Y']为'D',以此类推。

现有密文为"DOAI",根据一对一原则,翻译出来就是"SKPL"。

下面详细解释一下两种非法情况:

一、密码表脱漏

很好理解,就是有的密文位没有相对应的明文字母。排除方法:因为本题常数较小,考虑使用直接扫描的方法判断

二、密码表错乱

这种情况又分为两种小情况:一对多和多对一

一对多:一个密文位对应多个明文字母。排除方法:压入明文制表过程中判断,发现与当前占位被不同字母抢占则判定非法

多对一:多个密文对应一个明文字母。排除方法:全表从头至尾扫描,发现与当前明文占位不同明文相同的则判定非法

(此图大雾)

接下来是愉快的贴代码时间,是好孩子的话就不要抄袭题解呢……(微笑)

  1. //Stand up for the faith!
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define ll long long
  5.  
  6. char myst[],word[];
  7. char sent[],code[];
  8. //分别代表密文、明文、需译语句、密码表
  9. signed main(void)
  10. {
  11. scanf("%s%s",myst,word);
  12. int len1=strlen(myst);
  13. int len2=strlen(word);
  14. for(int i=;i<=;i++) code[i]='\0'; //初始化密码表,方便判断脱漏
  15. if(len1!=len2||len1<) //初步判断
  16. {
  17. puts("Failed");return ;
  18. }
  19. /*此处明确几点:
  20. 1、如果密文和明文长度不等,100%无法一一对应,视为非法
  21. 2、如果长度少于26,一定无法A-Z全部对应,直接非法
  22. 3、如果长度多于26,不一定非法(比如有两次等价对应)*/
  23. for(int i=;i<len1;i++)
  24. {
  25. if(code[myst[i]]>='A'&&code[myst[i]]<='Z'&&code[myst[i]]!=word[i])
  26. //判断不同字母对应相同密字(此前已有其他不同的字母占位)
  27. {
  28. puts("Failed");return ;
  29. }
  30. for(int j='A';j<='Z';j++)
  31. {
  32. if(code[j]==word[i]&&j!=myst[i])
  33. //判断相同字母对应不同密字(在不同占位上含有相同的字母)
  34. {
  35. puts("Failed");return ;
  36. }
  37. }
  38. code[myst[i]]=word[i];
  39. }
  40. for(int i='A';i<='Z';i++)
  41. {
  42. if(code[i]=='\0') //判断是否有字母没有出现
  43. {
  44. puts("Failed");return ;
  45. }
  46. }
  47. scanf("%s",sent);
  48. int len=strlen(sent);
  49. for(int i=;i<len;i++)
  50. {
  51. cout<<code[sent[i]]; //逐个输出对应字母
  52. }
  53. }

作者:KGB1331

2019-09-11 19:13:36

题解 洛谷P1071【潜伏者】的更多相关文章

  1. 洛谷 P1071 潜伏者

    P1071 潜伏者 题目描述 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S ...

  2. 洛谷 P1071 潜伏者 —— 模拟

    题目:https://www.luogu.org/problemnew/show/P1071 按题意模拟即可. 代码如下: #include<iostream> #include<c ...

  3. 洛谷P1071 潜伏者

    https://www.luogu.org/problem/P1071 #include<bits/stdc++.h> using namespace std; map<char,c ...

  4. [NOIP2009] 提高组 洛谷P1071 潜伏者

    题目描述 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原 ...

  5. 洛谷P1071潜伏者(提高组)

    题目描述 R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于S国的R 国间谍小C终于摸清了 S 国军用密码的编码规则: 1. S国军方内部欲发送的原信息经过加密后在网 ...

  6. (Java实现) 洛谷 P1071 潜伏者

    题目描述 R国和 S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S国的 R 国间谍小 C终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原信息经过 ...

  7. 题解 洛谷P5018【对称二叉树】(noip2018T4)

    \(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...

  8. 题解 洛谷 P3396 【哈希冲突】(根号分治)

    根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...

  9. 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)

    题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...

随机推荐

  1. C# Winform 自定义控件——竖着的Navbar

    效果: 描述: 这是一个可折叠的菜单导航,主要是由panel.picturebox.label完成,界面的颜色用来区分一下各个组合控件,便于调试. 首先,首先是ImageButton: 这个是由Pic ...

  2. 几大排序算法的Java实现(原创)

    几大排序算法的Java实现 更新中... 注: 该类中附有随机生成[min, max)范围不重复整数的方法,如果各位看官对此方法有什么更好的建议,欢迎提出交流. 各个算法的思路都写在该类的注释中了,同 ...

  3. 算法与数据结构基础 - 拓扑排序(Topological Sort)

    拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序 ...

  4. [Spring cloud 一步步实现广告系统] 18. 查询返回广告创意

    根据三个维度继续过滤 在上一节中我们实现了根据流量信息过滤的代码,但是我们的条件有可能是多条件一起传给我们的检索服务的,本节我们继续实现根据推广单元的三个维度条件的过滤. 在SearchImpl类中添 ...

  5. neural_transfer风格迁移

    ContentLoss 首先是要定义一个内容差异损失函数,这里直接调用functional.mse_loss(input,self.target)就可以计算出其内容差异损失. 注意这里一般是定义一个网 ...

  6. Kaggle比赛(一)Titanic: Machine Learning from Disaster

    泰坦尼克号幸存预测是本小白接触的第一个Kaggle入门比赛,主要参考了以下两篇教程: https://www.cnblogs.com/star-zhao/p/9801196.html https:// ...

  7. element-ui表单验证无效解决

    最近在项目中遇到了一个需求,需要动态增减表单元素,同时给新增的表单元素增加校验规则. element-ui官网给出了解决方案:点击新增按钮时,向循环渲染的数组中push新的对象,数据驱动视图,通过增加 ...

  8. Redis之对象篇——Redis对象系统简介

    Redis之对象篇--Redis对象系统简介 前言     之前几篇文章,简单介绍 Redis用到的所有主要数据结构,简单动态字符串(SDS).双端链表.字典.压缩列表.整数集合.跳跃表. 图解Red ...

  9. 基于开源中文分词工具pkuseg-python,我用张小龙的3万字演讲做了测试

    做过搜索的同学都知道,分词的好坏直接决定了搜索的质量,在英文中分词比中文要简单,因为英文是一个个单词通过空格来划分每个词的,而中文都一个个句子,单独一个汉字没有任何意义,必须联系前后文字才能正确表达它 ...

  10. redis最基础的入门教程

      Redis最基础入门教程 简介 Redis 简介 Redis 优势 Redis与其他key-value存储有什么不同? 字符串(Strings) 哈希(Hash) 列表(List) 集合(Sets ...