map——映射(message.cpp)
信息交换
(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)的更多相关文章
- POJ2503——Babelfish(map映射+string字符串)
Babelfish DescriptionYou have just moved from Waterloo to a big city. The people here speak an incom ...
- ZOJ 3644 Kitty's Game dfs,记忆化搜索,map映射 难度:2
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 从点1出发,假设现在在i,点数为sta,则下一步的点数必然不能是sta的 ...
- filter过滤器与map映射
filter过滤器 >>> list(filter(None,[0,1,2,True,False])) [1, 2, True] filter的作用就是后面的数据按照前面的表达式运算 ...
- map映射
采集于:https://blog.csdn.net/luanpeng825485697/article/details/78056312 映射map: var map = new Map(); //映 ...
- Java精选笔记_集合【Map(映射)接口】
Map(映射)接口 简介 该集合存储键值对,一对一对的往里存,并且键是唯一的.要保证map集合中键的唯一性. 从Map集合中访问元素时,只要指定了Key,就能找到对应的Value. 关键字是以后用于检 ...
- UVA12096 - The SetStack Computer(set + map映射)
UVA12096 - The SetStack Computer(set + map映射) 题目链接 题目大意:有五个动作: push : 把一个空集合{}放到栈顶. dup : 把栈顶的集合取出来, ...
- PHP转Go系列:map映射
映射的定义 初识映射会很懵,因为在PHP中没有映射类型的定义.其实没那么复杂,任何复杂的类型在PHP中都可以用数组表示,映射也不例外. $array['name'] = '平也'; $array['s ...
- Reactor系列(五)map映射
#java# #reactor# #flux# #map# #映射# 视频解视: https://www.bilibili.com/video/av79179444/ FluxMonoTestCase ...
- scala 数据结构(八 ):-map映射操作
在Scala中可以通过map映射操作来解决: 将集合中的每一个元素通过指定功能(函数)映射(转换)成新的结果集合这里其实就是所谓的将函数作为参数传递给另外一个函数,这是函数式编程的特点 以HashSe ...
随机推荐
- BaceModel
https://github.com/nicklockwood/BaseModel 字典封装成model 自动封装 要求属性的名字与字典一样 不能有对象 如果其中有需要自己封装的对象属性 重写setW ...
- 三大主流ETL工具选型
ETL(extract, transform and load)产品乍看起来似乎并不起眼,单就此项技术本身而言,几乎也没什么特别深奥之处,但是在实际项目中,却常常在这个环节耗费太多的人力,而在后续的维 ...
- HTML5简单入门系列(九)
前言 上篇本来应该就是最后一篇了,但是楼主总觉得没有写上一个简单应用,不算是完整的学习系列.所以增加一篇关于动画的应用,对一个开源动画的介绍(很基础,非楼主原创). 本篇介绍一个基于Canvas的发光 ...
- [C++程序设计]多维数组元素的地址
设有一个二维数组a,它有3行4列.它的定义为int a[3][4]={{1,3,5,7},{9,11,13,15},{17,18,21,23}};a是一个数组名.a数组包含3行,即3个元 素:a[0] ...
- 如何调用EcStore中的API接口
EcStore系统已内置了丰富的API接口供外部系统调用(接口列表见文章最下面),外部系统具体如何调用这些API呢? 例如有一个PHP的论坛需要调用ecstore系统内一个商品的详情,则可以使用b2c ...
- Expedition(优先队列)
Expedition 点我 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9465 Accepted: 2760 Des ...
- [转]浅谈C/C++内存泄露及其检测工具
转自:http://www.cnblogs.com/taoxu0903/archive/2007/10/27/939261.html 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问 ...
- Linux性能统计工具
Linux下的一些I/O统计工具 http://blog.csdn.net/longxibendi/article/details/36004155
- 【MVC4 之 ViewData ViewBag TempData】
ViewData (一个字典集合类型):传入的key必须是string类型,可以保存任意对象信息,特点:它只会存在这次的HTTP的要求中而已,并不像session可以将数据带到下一个Http要求. V ...
- ZOJ3516 (图的遍历)
Tree of Three Time Limit: 2 Seconds Memory Limit: 65536 KB Now we have a tree and some queries ...