信息交换

(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. oracle导出数据显示出现ora-00109或者LRM-00109出错修改办法

    出现这种问题是因为日期格式的问题,调整日期格式后就可以了 改成yyyy-mm-dd的格式就好了

  2. TexturePacker文件的反向解析-TextureUnpacker

    最近在使用cocos2d-x做开发,其中会用到TexturePacker工具打包纹理文件,但是有时候想从打包好的.plist和.png大图文件反向生成原始的小图文件,TexturePacker好像没有 ...

  3. (转) 新手入门:C/C++中的结构体

    本文转载于 http://pcedu.pconline.com.cn/empolder/gj/c/0503/567930_all.html#content_page_1 所有程序经过本人验证,部分程序 ...

  4. (原)Opencv中直方图均衡和图像动态范围拉伸的代码

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5102032.html 参考网址: http://blog.csdn.net/abcjennifer/a ...

  5. 每天一点css3聚沙成塔(一):transition

    transition 语法: transition:[ transition-property ] || [ transition-duration ] || [ transition-timing- ...

  6. TeXLive安装过程

    Linux系统下TeXLive2016安装教程:http://www.linuxidc.com/Linux/2016-08/133913.htm 安装完成后,在当前用户的 ~/.bashrc 中加入如 ...

  7. windows对象的属性和方法

    window对象是所有客户端javascript特性和API的主要接入点.它表示web浏览器的一个窗口或窗体,并且可以用标志符window来引用它. 一. windows对象的属性 1. locati ...

  8. BZOJ 2741 【FOTILE模拟赛】L(可持久化trie)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2741 思路:我们先将a变成a的异或前缀,这样问题就变成了,在l-1到r区间内,找出i,j令a[i]^ ...

  9. js Array数组的使用

    js Array数组的使用   Array是javascript中的一个事先定义好的对象(也可以称作一个类),可以直接使用 创建Array对象 var array=new Array(): 创建指定元 ...

  10. Silverlight 结合ArcGis 在地图上画线

    原文 http://www.dotblogs.com.tw/justforgood/archive/2012/05/10/72085.aspx 先来看看完成后的画面,我从桃园画到高雄,再由高雄画到香港 ...