题目链接:【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的更多相关文章

  1. HDU 1880 字符串hash 入门题

    Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔 ...

  2. hdu 1880 字符串hash

    /*普通的hsah 由于元素太多 空间很小..hash碰撞很厉害.30分*/ #include<iostream> #include<cstdio> #include<c ...

  3. HDOJ-ACM1425 sort 简单hash应用

    其实快排也可以通过这个问题~不是考点 没想到考点是这个,简单hash应用,空间换时间 初始化一个长度为1000001的数组(由于数字的范围为[-500000,500000]) 如果存在这个数m,数组下 ...

  4. hdu 1496 Equations hash表

    hdu 1496 Equations hash表 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1496 思路: hash表,将原来\(n^{4}\)降 ...

  5. HDU 1564 简单博弈 水

    n*n棋盘,初始左上角有一个石头,每次放只能在相邻的四个位置之一,不能操作者输. 如果以初始石头编号为1作为后手,那么对于每次先手胜的情况其最后一步的四周的编号必定是奇数,且此时编号为偶数,而对于一个 ...

  6. HDU——2112HDU Today(SPFA+简单Hash或map+前向星)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. HDU 1880 魔咒词典 (字符串hash)

    <题目链接> 题目大意: 就是每个字符串有一个配套的对应字符串,询问的时候,无论输出其中的哪一个字符串,输出另一个,如果不存在这个字符串,直接输出"what?". 解题 ...

  8. HDU 1880 魔咒词典 (Hash)

    魔咒词典 Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. hdu 4287Intelligent IME(简单hash)

    Intelligent IME Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

随机推荐

  1. About configuration center of Apollo

    A comparison among different configuration management tools Use of Apollo configuration management p ...

  2. zepto.js 实现原理解析

    zepto 是移动端常用的 dom 库,代码轻巧,操作方式类同 jquery.那么 zepto 的核心实现原理是什么呢?

  3. three.js轨道控制器OrbitControls.js

    https://blog.csdn.net/qq_37338983/article/details/78575333 文章地址

  4. 蓝色的企业后台cms管理系统——后台

    链接:http://pan.baidu.com/s/1kViBtTt 密码:7hbk

  5. python开发规范(转载)

    转载自http://www.cnblogs.com/wangcp-2014/p/4838952.html 目录 代码布局 1.1 缩进 1.2 表达式和语句中的空格 1.3 行的最大长度 1.4 空行 ...

  6. Linux端口占用

    1.netstat netstat -anp | grep 23232 Sample: [root@BICServer 0825]# netstat -anp | grep 23232 tcp 0 0 ...

  7. [ python ] 练习作业 - 2

    1.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者. lic = [0, 1, 2, 3, 4, 5] def func(l): return l[1::2 ...

  8. 数学中的Sin和Cos是什么意思?(转)

    数学中的Sin和Cos是什么意思? 作者:admin 分类:生活随笔 发表于 2012年03月21日 16:48 问:数学中的Sin和Cos是什么意思? 答:sin, cos, tan 都是三角函数, ...

  9. 终止函数 atexit()

    函数名: atexit   头文件:#include<stdlib.h>   功 能: 注册终止函数(即main执行结束后调用的函数)   用 法: int atexit(void (*f ...

  10. fail2ban安全设置

    1.先安装fail2ban服务包(这里我采用的是fail2ban-0.8.14.tar.gz) 2.解压安装包 cd /data/software tar xzf fail2ban-0.8.14.ta ...