【B003】潜伏者【难度B】——————————————————————————————————————————————————————————————————

【题目要求】

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】
AA
AB
EOWIE
【输入样例2】
QWERTYUIOPLKJHGFDSAZXCVBN
ABCDEFGHIJKLMNOPQRSTUVWXY
DSLIEWO
【输入样例3】
MSRTZCJKPFLQYVAWBINXUEDGHOOILSMIJFRCOPPQCEUNYDUMPP
YIZSDWAHLNOVFUCERKJXQMGTBPPKOIYKANZWPLLVWMQJFGQYLL
FLSO

【输出要求】

共1行。若破译密码停止时出现2,3两种情况,请你输出“Failed”(不含引号,注意首字母大写,其它小写)。否则请输出利用密码翻译电报中加密信息后得到的原信息。

【输出示例】

【输出样例1】Failed
【输出样例2】Failed
【输入样例3】NOIP

【试题分析】

我们先梳理一下题目中所提的要求,首先如果26个字母中有字母没有被提到,那我们直接输出Failed,第二种,26个字母中的几个被提到了两遍,且两遍对应的的“明文”不一样,那么我们输出Failed。第三种,假设提到了字母“A”,第一次提到的“明文”为“Q”,而当提到“Q”的明文时不是“A”而是其它的什么,可以输出Failed,第四种,即为没有矛盾,可以正常计算。

【代码】

#include<iostream>

using namespace std;

bool a[27];
int b[27],i,t,g,j;
int main()
{
string m1,m2,m3;
memset(b,-1,sizeof(b));
cin>>m2>>m1>>m3;
t=m1.length();
for(i=0;i<t;i++)
{
if(b[m2[i]-64]==-1||b[m2[i]-64]==m1[i])
b[m2[i]-64]=m1[i];
else
{
cout<<"Failed"<<endl;
return 0;
}
}
for(i=1;i<27;i++)
{
g=b[i];
for(j=1;j<27;j++)
if(b[j]==g && i!=j)
{
cout<<"Failed"<<endl;
return 0;
}
}
t=m3.length();
for(i=0;i<t;i++)
cout<<char(b[m3[i]-64]);
//system("pause");
return 0;
}

PS:本题我错了8次,呜呜呜!

NOIP2009潜伏者【B003】的更多相关文章

  1. noip2009 潜伏者

    P1071 潜伏者 827通过 2.2K提交 题目提供者洛谷OnlineJudge 标签字符串模拟2009NOIp提高组 难度普及/提高- 提交该题 讨论 题解 记录   题目描述 R 国和 S 国正 ...

  2. noip2009提高组解题报告

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

  3. noip2017考前整理(未完)

    快考试了,把我以前写过的题回顾一下.Noip2007 树网的核:floyd,推出性质,暴力.Noip2008 笨小猴:模拟Noip2008 火柴棒等式:枚举Noip2008 传纸条:棋盘dpNoip2 ...

  4. NOIP2009-2018简要题解

    口胡警告 NOIP2009 潜伏者 模拟 Hankson 的趣味题 对四个数\(a_0,a_1,b_0,b_1\)分解质因数,结果序列分别记为\(\{p1^{b1}\},\{p2^{b2}\},\{p ...

  5. NOIP2016考前做题(口胡)记录

    NOIP以前可能会持续更新 写在前面 NOIP好像马上就要到了,感觉在校内训练里面经常被虐有一种要滚粗的感觉(雾.不管是普及组还是提高组,我都参加了好几年了,结果一个省一都没有,今年如果还没有的话感觉 ...

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

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

  7. 洛谷 1071 潜伏者(NOIp2009提高组)

    [题意概述] 给出三行字符串,前两行代表密码与明文的对应关系,第三行为待翻译的文本.要求按照对应关系翻译文本. [题解] 直接模拟即可. 注意判断Failed的情况. #include<cstd ...

  8. [NOIp2009] luogu P1071 潜伏者

    翘课间操和体育课来水博客. 题目描述 CCF的题面贼长,但貌似除了背景以外,每句话都删不掉.不写啦,反正也是Ctrl C的. Solution 显然这是一道码农题. #include<cstdi ...

  9. 【字符串大模拟】潜伏者—— NOIP2009原题

    洛谷连接 就一道黄题没啥可以说的……就是要细心…… 学到了神奇的优化 ios::sync_with_stdio(false); cin优化,能跑的比scanf快!棒!(不过要开std) 这题真的还挺简 ...

随机推荐

  1. vim编辑器的使用

    I 在光标所在行的行首插入 A 在光标所在行的行尾插入 { 移动到上一段 } 移动到下一段 空格向后移动一格 H 屏幕顶部 M 屏幕中间 L 屏幕下方 n| 使光标移动到第几个字符处 ngg 移动到制 ...

  2. API接口:分页

    // 查询满足要求的总记录数 $count = M("back")->where($back_map)->count(); $pagecount = ceil($cou ...

  3. mahout 安装测试

    1 下载 在http://archive.apache.org/dist/mahout下载相应版本的mahout 版本,获取官网查看http://mahout.apache.org 相关的信息

  4. 最短JavaScript判断是否为IE6、IE的方法

    常用的 JavaScript 检测浏览器为 IE 是哪个版本的代码,包括是否是最人极端厌恶的 ie6 识别与检测. var isIE=!!window.ActiveXObject; var isIE6 ...

  5. Shell脚本中,如何判断Linux系统是32位还是64位?

    一行就能搞定,输出32或者64 可以用“和. 参考代码如下: ldconfig if [ $(getconf WORD_BIT) = '32' ] && [ $(getconf LON ...

  6. 自写网站入门阶段之三:兼容大战与jq初探

    自上一次作小结至今已整整一个月,在忙乎了半个月的工作之后闲下来的一个下午我终于可以再次作这个阶段的小结了.首先庆幸的是在同学的推荐下我顺利的找到了工作并于月初3号正式上班,这一点非常感谢他,让我免去了 ...

  7. jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}

    笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...

  8. 无需activity获得屏幕尺寸

    原文地址:http://blog.sina.com.cn/s/blog_4c277ad30100yfqo.html 客户需求需要增加对手机尺寸的读取 于是找了两个方法 第一种:通过activity引用 ...

  9. getRealPath("/")弃用

    用request.getSession().getServletContext().getRealPath("/");替换getRealPath("/"):

  10. 【YEOMAN】执行yo命令,报EACCES: permission denied, mkdir '/root/.config/configstore'

    基础环境:CentOS7.Nodejs6.0之上,yo:1.8.4 在执行yo初始化webapp时,报错,错误内容如下: Error: EACCES: permission denied, mkdir ...