信息交换

(message.cpp)

【题目描述】

Byteland战火又起,农夫John派他的奶牛潜入敌国获取情报信息。

Cow历尽千辛万苦终于将敌国的编码规则总结如下:

1 编码是由大写字母组成的字符串。

2 设定了密字。加密的过程就是把原信息的字母替换成对应密字。

3 一个字母有且仅有一个对应密字,不同字母对应不同密字。

如今,Cow终于获取了敌国发送的一条加密信息和对应的原信息。Cow如下破解密码:扫描原信息,对于原信息中的字母x,找到它在加密信息中的对应大写字母y,且认为y是x的密字。

Cow的工作停止于以下情况:

1 信息扫描完毕且没有差错

2 扫描完毕但有字母没有在原信息中出现。

3 扫描中出现矛盾或错误,即违反上述的规则。

现在,John发来信息,要求Cow利用破译的密字翻译一条刚刚截获的敌国信息。

【文件格式】

输入文件:

第一行为Cow知道的一条加密信息。

第二行为加密信息的原信息。

第三行为John要求Cow翻译的加密信息。

输出文件:

一行,如果出现2 3 所示的停止情况则输出“Failed”,否则翻译John传送的信息。

【样例数据】

#1

Input

QWERTYUIOPLKJHGFDSAZXCVBN

ABCDEFGHIJKLMNOPQRSTUVWXY

DSLIEWO

Output

Failed

#2

Input

QWERTYUIOPLKJHGFDSAZXCVBNM

ABCDEFGHIJKLMNOPQRSTUVWXYZ

IQHPOQKGHU

Output

HANJIALONG

这道题直接上map映射就可以了

下面上资料:

map的基本操作函数:
      C++ Maps是一种关联式容器,包含“关键字/值”对
      begin()          返回指向map头部的迭代器
      clear()         删除所有元素
      count()          返回指定元素出现的次数
      empty()          如果map为空则返回true
      end()            返回指向map末尾的迭代器
      equal_range()    返回特殊条目的迭代器对
      erase()          删除一个元素
      find()           查找一个元素
      get_allocator()  返回map的配置器
      insert()         插入元素
      key_comp()       返回比较元素key的函数
      lower_bound()    返回键值>=给定元素的第一个位置
      max_size()       返回可以容纳的最大元素个数
      rbegin()         返回一个指向map尾部的逆向迭代器
      rend()           返回一个指向map头部的逆向迭代器
      size()           返回map中元素的个数
      swap()            交换两个map
      upper_bound()     返回键值>给定元素的第一个位置
      value_comp()      返回比较元素value的函数

这道题的代码:

 #include<iostream>
#include<cstdio>
#include<map>
#include<string> using namespace std; map<char,char> bianma; string a,b,c;
int cishu=; int main()
{
freopen("message.in","r",stdin);
freopen("message.out","w",stdout);
cin>>a>>b>>c;
for(int i=;i < a.length(); i++)
{
if(bianma.count(a[i]))
{
if(bianma[a[i]]!=b[i])
{
cout<<"Failed";
return ;
}
}
else
{
cishu++;
bianma[a[i]]=b[i];
}
}
if(cishu!=)
{
cout<<"Failed";
return ;
}
for(int i=;i<=c.length();i++)
{
c[i]=bianma[c[i]];
}
cout<<c;
return ;
}

(本代码原题能过9个点)

============================分割线=================================

2016.1.7                 21:24更新

刚刚又看了一下测试点,没过的那个点原因找到了:

第三个点

QWERTYUIOPLKJHGFDSAZXCVBNM
QWERTYUIOPLKJHGFDSAZXCVBNN
HIJACK

没看如果这个字母如果被映射过怎么办(第二行里的那个N)

这一次用了两个map,另一个用来个反向判断,代码如下:

#include<iostream>
#include<cstdio>
#include<map>
#include<string> using namespace std; map<char,char> bianma;
map<char,char> jiaodui; string a,b,c;
int cishu=0; int main()
{
freopen("message.in","r",stdin);
freopen("message.out","w",stdout);
cin>>a>>b>>c;
for(int i=0;i < a.length(); i++)
{
if(bianma.count(a[i])||jiaodui.count(b[i]))
{
if(bianma[a[i]]!=b[i]||jiaodui[b[i]]!=a[i])
{
cout<<"Failed";
return 0;
}
}
else
{
cishu++;
bianma[a[i]]=b[i];
jiaodui[b[i]]=a[i];
}
}
if(cishu!=26)
{
cout<<"Failed";
return 0;
}
for(int i=0;i<=c.length();i++)
{
c[i]=bianma[c[i]];
}
cout<<c;
return 0;
}

(这次十个点全过)  

附:本题测试数据:http://files.cnblogs.com/files/zhangone/message.zip

map——映射(message.cpp)的更多相关文章

  1. POJ2503——Babelfish(map映射+string字符串)

    Babelfish DescriptionYou have just moved from Waterloo to a big city. The people here speak an incom ...

  2. ZOJ 3644 Kitty's Game dfs,记忆化搜索,map映射 难度:2

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 从点1出发,假设现在在i,点数为sta,则下一步的点数必然不能是sta的 ...

  3. filter过滤器与map映射

    filter过滤器 >>> list(filter(None,[0,1,2,True,False])) [1, 2, True] filter的作用就是后面的数据按照前面的表达式运算 ...

  4. map映射

    采集于:https://blog.csdn.net/luanpeng825485697/article/details/78056312 映射map: var map = new Map(); //映 ...

  5. Java精选笔记_集合【Map(映射)接口】

    Map(映射)接口 简介 该集合存储键值对,一对一对的往里存,并且键是唯一的.要保证map集合中键的唯一性. 从Map集合中访问元素时,只要指定了Key,就能找到对应的Value. 关键字是以后用于检 ...

  6. UVA12096 - The SetStack Computer(set + map映射)

    UVA12096 - The SetStack Computer(set + map映射) 题目链接 题目大意:有五个动作: push : 把一个空集合{}放到栈顶. dup : 把栈顶的集合取出来, ...

  7. PHP转Go系列:map映射

    映射的定义 初识映射会很懵,因为在PHP中没有映射类型的定义.其实没那么复杂,任何复杂的类型在PHP中都可以用数组表示,映射也不例外. $array['name'] = '平也'; $array['s ...

  8. Reactor系列(五)map映射

    #java# #reactor# #flux# #map# #映射# 视频解视: https://www.bilibili.com/video/av79179444/ FluxMonoTestCase ...

  9. scala 数据结构(八 ):-map映射操作

    在Scala中可以通过map映射操作来解决: 将集合中的每一个元素通过指定功能(函数)映射(转换)成新的结果集合这里其实就是所谓的将函数作为参数传递给另外一个函数,这是函数式编程的特点 以HashSe ...

随机推荐

  1. TextField详细用法

    http://www.cnblogs.com/VincentXue/archive/2012/08/28/2660001.html

  2. js基础-需要注意的地方

    ---因为跟别的语言很像,所以只记录要注意的地方 1.== 和 === 的区别 ===要求类型也相等 "5"==5 = ture "5"===5 = false ...

  3. Python3.5入门学习记录-条件控制

    Python的条件控制同C#一样,都是通过一条或多条语句的执行结果(True OR False)来决定执行的代码块. if 语句 Python中if语句的一般形式如下所示: if condition_ ...

  4. [转载]Silverlight实用窍门系列:71.Silverlight的Style

    本文版权归作者和博客园共有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 原文链接:http://www.cnblogs.com/chengx ...

  5. ThinkPhp调用webservice

    模板页: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...

  6. php getenv 和 putenv 用法

    getenv 的功能是取得一个指定的环境变量. getenv('REMOTE_ADDR') 和 $_SERVER['REMOTE_ADDR'] 功能一样 但是当Web服务器API是ASAPI (IIS ...

  7. 我和Python的第一次亲密接触 - 零基础入门学习Python001

    我和Python的第一次亲密接触 让编程改变世界 Change the world by program 小甲鱼经常说,学习一门编程语言就是要深入其中,要把编程语言想象为你的女朋友你的情人,这样你学习 ...

  8. linux 添加自定义环境变量

    1. vi /etc/profile ,在文件末尾加上要定义的环境变量,语法如下: export 变量名=变量值

  9. shell重定向

    输入重定向 和输出重定向一样,Unix 命令也可以从文件获取输入,语法为: command < file 这样,本来需要从键盘获取输入的命令会转移到文件读取内容. 注意:输出重定向是大于号(&g ...

  10. UESTC_Big Brother 2015 UESTC Training for Graph Theory<Problem G>

    G - Big Brother Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) ...