题解 洛谷P1071【潜伏者】
题目链接:https://www.luogu.org/problem/P1071
题意概括:给你一段原来截获的英文密码和与之对应的明文,如果密码表非F♂A法,输出"Failed" ,否则翻译现在给你的一句密文并输出。(所有字母均为大写)
有两种情况视为密码表非法:
1、 所有信息扫描完毕,但发现有字母在原信息中没有出现(密码表脱漏)。
2、 扫描中发现掌握的信息里有明显的自相矛盾或错误(密码表错乱)。
这道题主要思想可以利用数组打表,首先我们定义一个数组code作为密码表
然后进行密码表制作,比如一个密文是“DDYAKIOI”,明文是“SSDPOLKL”(首先声明一点,这只是为了便于理解写的短样例,这个样例实际上已经非法了)
可见code['D'](即code[68])为'S',code['Y']为'D',以此类推。
现有密文为"DOAI",根据一对一原则,翻译出来就是"SKPL"。
下面详细解释一下两种非法情况:
一、密码表脱漏
很好理解,就是有的密文位没有相对应的明文字母。排除方法:因为本题常数较小,考虑使用直接扫描的方法判断

二、密码表错乱
这种情况又分为两种小情况:一对多和多对一
一对多:一个密文位对应多个明文字母。排除方法:压入明文制表过程中判断,发现与当前占位被不同字母抢占则判定非法

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

(此图大雾)
接下来是愉快的贴代码时间,是好孩子的话就不要抄袭题解呢……(微笑)
//Stand up for the faith!
#include<bits/stdc++.h>
using namespace std;
#define ll long long char myst[],word[];
char sent[],code[];
//分别代表密文、明文、需译语句、密码表
signed main(void)
{
scanf("%s%s",myst,word);
int len1=strlen(myst);
int len2=strlen(word);
for(int i=;i<=;i++) code[i]='\0'; //初始化密码表,方便判断脱漏
if(len1!=len2||len1<) //初步判断
{
puts("Failed");return ;
}
/*此处明确几点:
1、如果密文和明文长度不等,100%无法一一对应,视为非法
2、如果长度少于26,一定无法A-Z全部对应,直接非法
3、如果长度多于26,不一定非法(比如有两次等价对应)*/
for(int i=;i<len1;i++)
{
if(code[myst[i]]>='A'&&code[myst[i]]<='Z'&&code[myst[i]]!=word[i])
//判断不同字母对应相同密字(此前已有其他不同的字母占位)
{
puts("Failed");return ;
}
for(int j='A';j<='Z';j++)
{
if(code[j]==word[i]&&j!=myst[i])
//判断相同字母对应不同密字(在不同占位上含有相同的字母)
{
puts("Failed");return ;
}
}
code[myst[i]]=word[i];
}
for(int i='A';i<='Z';i++)
{
if(code[i]=='\0') //判断是否有字母没有出现
{
puts("Failed");return ;
}
}
scanf("%s",sent);
int len=strlen(sent);
for(int i=;i<len;i++)
{
cout<<code[sent[i]]; //逐个输出对应字母
}
}
作者:KGB1331
2019-09-11 19:13:36
题解 洛谷P1071【潜伏者】的更多相关文章
- 洛谷 P1071 潜伏者
P1071 潜伏者 题目描述 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S ...
- 洛谷 P1071 潜伏者 —— 模拟
题目:https://www.luogu.org/problemnew/show/P1071 按题意模拟即可. 代码如下: #include<iostream> #include<c ...
- 洛谷P1071 潜伏者
https://www.luogu.org/problem/P1071 #include<bits/stdc++.h> using namespace std; map<char,c ...
- [NOIP2009] 提高组 洛谷P1071 潜伏者
题目描述 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原 ...
- 洛谷P1071潜伏者(提高组)
题目描述 R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于S国的R 国间谍小C终于摸清了 S 国军用密码的编码规则: 1. S国军方内部欲发送的原信息经过加密后在网 ...
- (Java实现) 洛谷 P1071 潜伏者
题目描述 R国和 S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S国的 R 国间谍小 C终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原信息经过 ...
- 题解 洛谷P5018【对称二叉树】(noip2018T4)
\(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...
- 题解 洛谷 P3396 【哈希冲突】(根号分治)
根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...
- 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)
题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...
随机推荐
- Salesforce LWC学习(三) import & export / api & track
我们使用vs code创建lwc 时,文件会默认生成包含 template作为头的html文件,包含了 import LightningElement的 js文件以及对应的.js-meta.xml文件 ...
- [趣学程序]java的常用类之String
java基础之常用类 String类 String表示字符串,所谓字符串,就是一连串的字符,是java中最常用的类之一. String是不可变类,一旦String对象被创建,包含在对象中的字符序列(内 ...
- HBase的高可用(HA)
在公司写文档时候查到的一些资料,感觉对自己很有帮助,现在整理如下: 介绍 HBase是一个高可靠性.高性能.列存储.可伸缩.实时读写的分布式数据库系统,基于列的存储模式适合于存储非结构化数据. 适用场 ...
- Go_笔试题记录-不熟悉的
1.golang中没有隐藏的this指针,这句话的含义是() A. 方法施加的对象显式传递,没有被隐藏起来 B. golang沿袭了传统面向对象编程中的诸多概念,比如继承.虚函数和构造函数 C. go ...
- Unity移动游戏加载性能和内存管理-学习笔记
前言 正在学习Doctor 张.鑫大佬的移动游戏加载性能和内存管理,内容非常非常的干,所以我烧了很多开水,边喝边看,一边拿小本几做好笔记 本文只是关于前2章的内容笔记,关于各种资源的加载耗时 纹理资源 ...
- poium测试库之JavaScript API封装原理
poium一直我在维护的一个开源项目,它的定位是以极简的方式在自动化项目中Page Objects设计模式.我在之前的文章中也有介绍. 本篇文章主要介绍一个JavaScript元素操作的封装原理. 为 ...
- PIXIJS的一些使用
我发现pixijs在国内简直就是一片静土啊,只有那么一点点的微弱的不能再微弱的声音. 我在这里整理了下我使用过程中解决和可能理解的一些问题吧,都是一个个点,而不是完整的示例. 先放官网示例: http ...
- C++中轻量级多线程openmp
关于其概念及使用方法: https://baike.baidu.com/item/openmp/3735430?fr=aladdin
- 第五章 函数day2
5.2函数小高级 5.2.1 函数当参数 1 函数也可以当返回值 def v(dar): v = dar() def n (): print(444) v(n) # 实例2 def v(): prin ...
- ssh-key生成密钥及SSH无密码登录的配置
文章作者:foochane 原文链接:https://foochane.cn/article/2019061601.html 1 ssh-keygen命令 ssh-keygen命令说明: -t :指 ...