题目链接: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【潜伏者】的更多相关文章

  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. 跟着大彬读源码 - Redis 9 - 对象编码之 三种list

    目录 1 ziplist 2 skiplist 3 quicklist 总结 Redis 底层使用了 ziplist.skiplist 和 quicklist 三种 list 结构来实现相关对象.顾名 ...

  2. Java:控制反转(IoC)与依赖注入(DI)

    很长一段时间里,我对控制反转和依赖注入这两个概念很模糊,闭上眼睛想一想,总有一种眩晕的感觉.但为了成为一名优秀的 Java 工程师,我花了一周的时间,彻底把它们搞清楚了. 01.紧耦合 在我们编码的过 ...

  3. 佳木斯集训Day7

    毒瘤出题人!!! T2的题面和样例不一样,所以我挂了(没错这就是我写模拟写挂了的理由) T1 大水题,懒得解释了,五分钟AC #include <bits/stdc++.h> #defin ...

  4. 消息中间件和JMS介绍(一)

    在一个公司创立初期,他可能只有几个应用,系统之间的关联也不是那么大,A系统调用B系统就直接调用B提供的API接口:后来这个公司做大了,他一步步发展有了几十个系统,这时候A系统要调用B系统的接口,但是B ...

  5. vue.js中ref及$refs的使用及讲解

    关于ref和$refs的用法及讲解,vue.js中文社区( https://cn.vuejs.org/v2/api/#ref )是这么讲解的: ref 被用来给元素或子组件注册引用信息,引用信息将会注 ...

  6. Python爬虫,爬取腾讯漫画实战

    先上个爬取的结果图 最后的结果为每部漫画按章节保存 运行环境 IDE VS2019 Python3.7 先上代码,代码非常简短,包含空行也才50行,多亏了python强大的库 import os im ...

  7. 常用的python内置方法

    all  ( )                                 循环参数,参数全为真就返回Ture  any()                              只要有一个 ...

  8. Django上线部署之Apache

    环境: 1.Windows Server 2016 Datacenter 64位 2.SQL Server 2016 Enterprise 64位 3.Python 3.6.0 64位 4.admin ...

  9. 第一章 .NET基础-C#基础

    一.1.1. 基础语法 一.1.1.1. 注释符 一.1.1.1.1. 注释符的作用 l 注释 l 解释 一.1.1.1.2. C#中的3中注释符 l 单行注释 // l 多上注释 /* 要注释的内容 ...

  10. Nginx介绍与反向代理

    Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器.基于REST架构风格,以统一资源描述符(Unifor ...