信息交换

(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. TCP粘包/拆包问题的解决

    TCP粘包拆包问题 一个完整的包可能被TCP拆分成多个包,或多个小包封装成一个大的数据包发送. 解决策略 消息定长,如果不够,空位补空格 在包尾增加回车换行符进行分割,例如FTP协议 将消息分为消息头 ...

  2. linux中运行python

    1.在终端中输入: python    **.py 2.最爽的方法: emacs中配置python运行环境.

  3. 安卓tabhost和子Activity通信方法

    发现很多同学在问这个问题 1个tabhost对应的类假设是T,假设包含2个子tab,每个是1个activity,假设叫a,b,对应的类假设是A和B 那么有这几个问题 1.a如何调用b的方法,或者说发送 ...

  4. 远程复制 scp命令

    定义 本机为A,用户名为usera,登录远程主机B的为userb,IP为remote_ip 1. 从B 拷贝文件到A机器  用下面的命令 scp userb@remote_ip:remote_path ...

  5. deepin 2014 静态IP无法保存,临时方法

    打开终端: #临时添加静态IP ifconfig eth0 [ip] netmask [掩码] #添加默认网关 route add default gw [网关] #添加DNS vim /etc/re ...

  6. Python解析json字符串

    {"status":0,"result":{"location":{"lng":116.47847460177,&quo ...

  7. Meteor Shower(POJ 3669)

    Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12816   Accepted: 3451 De ...

  8. joseph-约瑟夫环问题

    约瑟夫环运作如下: 1.一群人围在一起坐成环状(如:N) 2.从某个编号开始报数(如:K) 3.数到某个数(如:M)的时候,此人出列,下一个人重新报数 4.一直循环,直到所有人出列,约瑟夫环结束 关于 ...

  9. OC 代理 协议 委托 数据源的概念

    (网摘) OBJC 中的 protocol 相当于 java 里的接口,delagate 就是接口的实现类(C中的回调类似 ): 数据源就是对象遵循了存储数据的协议,可以存储使用数据 协议表示了方法可 ...

  10. python学习资料

    http://woodpecker.org.cn/diveintopython/ http://www.cnblogs.com/txw1958/archive/2012/12/10/A_Byte_of ...