HDU 1880 简单Hash
题目链接:【http://acm.hdu.edu.cn/showproblem.php?pid=1880】
中文题面,题意很简单;
题解: 把每个 魔咒 和 对应的功能分别Hash,然后分别映射到map<ULL,string>里面,(魔咒Hash值,对应的功能)和(对应功能Hash值,魔咒)。
Hash 方式采用最简单的那种Hash即可。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100 + 15;
const int sed = 131;
typedef unsigned long long ULL;
unordered_map<ULL, string>mpa, mpb;
char tmp[maxn], sa[maxn], sb[maxn];
ULL get_Hash(char s[], int len)
{
ULL ret = 0;
for(int i = 0; i < len; i++)
{
ret = ret * sed + s[i];
}
return ret;
}
int main ()
{
while(true)
{
gets(tmp);
int len = strlen(tmp);
if(!strcmp("@END@", tmp)) break;
int cnt = 0, pos = 0;
for(int i = 1; i < len; i++)
{
if(tmp[i] == ']')
{
pos = i + 2;
break;
}
sa[cnt++] = tmp[i];
}
sa[cnt] = 0;
ULL ta = get_Hash(sa, cnt);
cnt = 0;
for(int i = pos; i < len; i++)
sb[cnt++] = tmp[i];
sb[cnt] = 0;
ULL tb = get_Hash(sb, cnt);
mpa[ta] = (string)(sb);
mpb[tb] = (string)(sa);
}
int N;
scanf("%d", &N);
gets(tmp);
for(int i = 1; i <= N; i++)
{
gets(tmp);
int len = strlen(tmp);
if(tmp[0] == '[')
{
for(int i = 0; i < len; i++)
tmp[i] = tmp[i + 1];
tmp[len - 2] = 0;
ULL T = get_Hash(tmp, len - 2);
if(mpa.count(T))
cout << mpa[T] << endl;
else
cout << "what?" << endl;
continue;
}
ULL T = get_Hash(tmp, len);
if(mpb.count(T))
cout << mpb[T] << endl;
else
cout << "what?" << endl;
}
return 0;
}
HDU 1880 简单Hash的更多相关文章
- HDU 1880 字符串hash 入门题
Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔 ...
- hdu 1880 字符串hash
/*普通的hsah 由于元素太多 空间很小..hash碰撞很厉害.30分*/ #include<iostream> #include<cstdio> #include<c ...
- HDOJ-ACM1425 sort 简单hash应用
其实快排也可以通过这个问题~不是考点 没想到考点是这个,简单hash应用,空间换时间 初始化一个长度为1000001的数组(由于数字的范围为[-500000,500000]) 如果存在这个数m,数组下 ...
- hdu 1496 Equations hash表
hdu 1496 Equations hash表 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1496 思路: hash表,将原来\(n^{4}\)降 ...
- HDU 1564 简单博弈 水
n*n棋盘,初始左上角有一个石头,每次放只能在相邻的四个位置之一,不能操作者输. 如果以初始石头编号为1作为后手,那么对于每次先手胜的情况其最后一步的四周的编号必定是奇数,且此时编号为偶数,而对于一个 ...
- HDU——2112HDU Today(SPFA+简单Hash或map+前向星)
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 1880 魔咒词典 (字符串hash)
<题目链接> 题目大意: 就是每个字符串有一个配套的对应字符串,询问的时候,无论输出其中的哪一个字符串,输出另一个,如果不存在这个字符串,直接输出"what?". 解题 ...
- HDU 1880 魔咒词典 (Hash)
魔咒词典 Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 4287Intelligent IME(简单hash)
Intelligent IME Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
随机推荐
- About configuration center of Apollo
A comparison among different configuration management tools Use of Apollo configuration management p ...
- zepto.js 实现原理解析
zepto 是移动端常用的 dom 库,代码轻巧,操作方式类同 jquery.那么 zepto 的核心实现原理是什么呢?
- three.js轨道控制器OrbitControls.js
https://blog.csdn.net/qq_37338983/article/details/78575333 文章地址
- 蓝色的企业后台cms管理系统——后台
链接:http://pan.baidu.com/s/1kViBtTt 密码:7hbk
- python开发规范(转载)
转载自http://www.cnblogs.com/wangcp-2014/p/4838952.html 目录 代码布局 1.1 缩进 1.2 表达式和语句中的空格 1.3 行的最大长度 1.4 空行 ...
- Linux端口占用
1.netstat netstat -anp | grep 23232 Sample: [root@BICServer 0825]# netstat -anp | grep 23232 tcp 0 0 ...
- [ python ] 练习作业 - 2
1.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者. lic = [0, 1, 2, 3, 4, 5] def func(l): return l[1::2 ...
- 数学中的Sin和Cos是什么意思?(转)
数学中的Sin和Cos是什么意思? 作者:admin 分类:生活随笔 发表于 2012年03月21日 16:48 问:数学中的Sin和Cos是什么意思? 答:sin, cos, tan 都是三角函数, ...
- 终止函数 atexit()
函数名: atexit 头文件:#include<stdlib.h> 功 能: 注册终止函数(即main执行结束后调用的函数) 用 法: int atexit(void (*f ...
- fail2ban安全设置
1.先安装fail2ban服务包(这里我采用的是fail2ban-0.8.14.tar.gz) 2.解压安装包 cd /data/software tar xzf fail2ban-0.8.14.ta ...