信息交换

(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的函数

这道题的代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<map>
  4. #include<string>
  5.  
  6. using namespace std;
  7.  
  8. map<char,char> bianma;
  9.  
  10. string a,b,c;
  11. int cishu=;
  12.  
  13. int main()
  14. {
  15. freopen("message.in","r",stdin);
  16. freopen("message.out","w",stdout);
  17. cin>>a>>b>>c;
  18. for(int i=;i < a.length(); i++)
  19. {
  20. if(bianma.count(a[i]))
  21. {
  22. if(bianma[a[i]]!=b[i])
  23. {
  24. cout<<"Failed";
  25. return ;
  26. }
  27. }
  28. else
  29. {
  30. cishu++;
  31. bianma[a[i]]=b[i];
  32. }
  33. }
  34. if(cishu!=)
  35. {
  36. cout<<"Failed";
  37. return ;
  38. }
  39. for(int i=;i<=c.length();i++)
  40. {
  41. c[i]=bianma[c[i]];
  42. }
  43. cout<<c;
  44. return ;
  45. }

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

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

2016.1.7                 21:24更新

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

第三个点

QWERTYUIOPLKJHGFDSAZXCVBNM
QWERTYUIOPLKJHGFDSAZXCVBNN
HIJACK

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

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

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<map>
  4. #include<string>
  5.  
  6. using namespace std;
  7.  
  8. map<char,char> bianma;
  9. map<char,char> jiaodui;
  10.  
  11. string a,b,c;
  12. int cishu=0;
  13.  
  14. int main()
  15. {
  16. freopen("message.in","r",stdin);
  17. freopen("message.out","w",stdout);
  18. cin>>a>>b>>c;
  19. for(int i=0;i < a.length(); i++)
  20. {
  21. if(bianma.count(a[i])||jiaodui.count(b[i]))
  22. {
  23. if(bianma[a[i]]!=b[i]||jiaodui[b[i]]!=a[i])
  24. {
  25. cout<<"Failed";
  26. return 0;
  27. }
  28. }
  29. else
  30. {
  31. cishu++;
  32. bianma[a[i]]=b[i];
  33. jiaodui[b[i]]=a[i];
  34. }
  35. }
  36. if(cishu!=26)
  37. {
  38. cout<<"Failed";
  39. return 0;
  40. }
  41. for(int i=0;i<=c.length();i++)
  42. {
  43. c[i]=bianma[c[i]];
  44. }
  45. cout<<c;
  46. return 0;
  47. }

(这次十个点全过)  

附:本题测试数据: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. java加载资源文件

    className.class.getResourceAsStream 用法: 第一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件c ...

  2. IOS开发之程序执行状态更改

    1 前言 上节我们介绍了程序执行的状态,从例子中我们可以发现处理这些状态更改的时候有明确的策略可以遵循,这次我们就来介绍一下. 2 详述 2.1 活动->不活动 使用applicationWil ...

  3. html布局

    1.div <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8 ...

  4. setNeedsDisplay、layoutSubViews

    UIView的setNeedsDisplay和setNeedsLayout方法.首先两个方法都是异步执行的.而setNeedsDisplay会调 用自动调用drawRect方法,这样可以拿到UIGra ...

  5. (原+转)ubuntu14中结束多个caffe进程中的某个

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5948237.html 参考网址: http://www.2cto.com/os/201407/3215 ...

  6. VM11里安装ubuntukylin-16.04-desktop-amd64遇到问题

    一.ubuntu linux的地址 http://www.ubuntu-china.cn/ 这个地址是中国站,点击下载菜单后,有两个版本,一个是ubuntu,一个是kylin.后者是专门加了中文程序的 ...

  7. mysql导入.sql文件

    1. source /home/susie ...../**.sql 2. \. /home/susie/.../**.sql 批量导入.sql文件 首先新建一个main.sql,然后在main.sq ...

  8. python之3内置容器

    所谓内置容器,就是不需要第三方模块,就可以使用的. 1.list容器,一个有序序列,类似于数组,但比数组强大很多 1.1.如何初始化list,直接一个[]即可,这是一个空的list >>& ...

  9. Ucenter注册后,需要二次登录才能同步登录的解决方案

    1. 打开配置文件config.inc.php 在根目录data目录下最下方定义 define('DZ_DBTABLEPRE', '你的表前缀'); 2.打开uc_server/model/user. ...

  10. 更有效率的使用 Visual Studio - 快捷键

    工欲善其事,必先利其器.虽然说Vim和Emacs是神器,但是对于使用Visual Studio的程序员来说,我们也可以通过一些快捷键和潜在的一些功能实现脱离鼠标写代码,提高工作效率,像使用Vim一样使 ...