hdu 1880 魔咒字典
https://vjudge.net/problem/HDU-1880
题意:略
思路:
一开始就是想到了正确的思路,但是代码写炸了,死活过不了。这题嘛,就是建议一个魔咒与咒语的双向映射。首先用字符串hash将魔咒与咒语的hash值给算出来,之后用两个map保存魔咒的hash与魔咒下标,咒语的hash与咒语的下标。hash用的是优秀的bkdr算法,好写而且不容易冲突。最后查询的时候有一个技巧,就是如果说以’[‘开头,那么肯定是魔咒,就输出咒语,反之输出魔咒。一开始确实是没有想到如果说魔咒的hash和咒语的hash冲突了怎么办,那么就用上面所说的那个技巧就可以完美解决。
代码:
#include <stdio.h>
#include <string.h>
#include <map>
using namespace std; const int maxn = ;
int num = ; char mz[maxn][];
char zy[maxn][]; map<int,int> mpmz,mpzy; unsigned int myhash(char* s)
{
unsigned int seed = ;
unsigned int h = ; while (*s)
{
h = h * seed + (*s++);
} return (h & 0x7FFFFFFF);
} void init(void)
{
for (int i = ;i < num;i++)
{
mpmz[myhash(mz[i])] = i;
mpzy[myhash(zy[i])] = i; //printf("%d**\n",myhash(mz[num]));
//printf("%d**\n",myhash(zy[num]));
}
} int main()
{
num = ; while ()
{
scanf("%s",mz[num]); if (mz[num][] == '@') break; getchar(); gets(zy[num]); //printf("%s$$\n",zy[num]); num++;
} init(); int n; scanf("%d",&n); getchar(); while (n--)
{
char t[]; gets(t); if (t[] == '[')
{
int tmp = mpmz[myhash(t)]; //printf("%d**\n",myhash(t)); if (tmp == ) printf("%s\n","what?");
else printf("%s\n",zy[tmp]);
}
else
{
int tmp = mpzy[myhash(t)]; //printf("%d**\n",tmp); if (tmp == ) printf("%s\n","what?");
else
{
for (int j = ;j < strlen(mz[tmp]) - ;j++)
printf("%c",mz[tmp][j]); printf("\n");
}
}
} return ;
}
hdu 1880 魔咒字典的更多相关文章
- hdu 1880 魔咒词典
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1880 魔咒词典 Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有10 ...
- HDU 1880 魔咒词典(字符串哈希)
题目链接 Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一 ...
- HDU 1880 魔咒词典 (Hash)
魔咒词典 Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 1880 魔咒词典 (字符串哈希)
魔咒词典 Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU - 1880 魔咒词典~哈希入门
哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. 给你一部魔咒词 ...
- hdu 1880 魔咒词典(双hash)
魔咒词典Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 1880 魔咒词典 (字符串hash)
<题目链接> 题目大意: 就是每个字符串有一个配套的对应字符串,询问的时候,无论输出其中的哪一个字符串,输出另一个,如果不存在这个字符串,直接输出"what?". 解题 ...
- 魔咒词典(hdu 1880)
Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔 ...
- 魔咒词典 HDU - 1880 (字符串hash 单hash转int或者 双hash )
哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. 给你一部魔咒词 ...
随机推荐
- 安装Accumulo——突破自己,就是成长
前言 在我刚开始接触分布式集群的时候,是自己在几台虚拟机中手动安装的 Hadoop 和 Spark ,所以当时对 Hadoop 的配置有个简单的印象 ,但是后面发现了 Cloudera 和 Ambar ...
- 深入java虚拟机学习 -- 内存管理机制
前面说过了类的加载机制,里面讲到了类的初始化中时用到了一部分内存管理的知识,这里让我们来看下Java虚拟机是如何管理内存的. 先让我们来看张图 有些文章中对线程隔离区还称之为线程独占区,其实是一个意思 ...
- iOS学习——tableview中带编辑功能的cell键盘弹出遮挡和收起问题解决
最近在项目中经常用到UITableView中的cell中带有UITextField或UITextView的情况,然后在这种场景下,当我们点击屏幕较下方的cell进行编辑时,这时候键盘弹出来会出现遮挡待 ...
- SpringBoot 整合 Swagger2
1. Swagger UI 按以下步骤配置,项目启动后访问:http://localhost:8080/swagger-ui.html 1.1 添加依赖 <dependency> < ...
- linux拓展下:批量改扩展名的方法
[root@oldboy oldboy]# ll total 0 -rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_1_.jpg -rw-r--r-- ...
- python函数知识点(详解匿名函数)
Python函数是组织好的.单一的.具有独立功能模块的代码块. 函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print().但你也可以自己创建函数,这被叫做用户自定 ...
- 解决Hystrix Dashboard 一直是Loading ...的情况
Hystrix是什么 Hystrix 能使你的系统在出现依赖服务失效的时候,通过隔离系统所依赖的服务,防止服务级联失败,同时提供失败回退机制,更优雅地应对失效,并使你的系统能更快地从异常中恢复. Hy ...
- JQuery操作option的添加、删除、取值
1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发 2. var checkTex ...
- 从Firefox升级说学习方法
今天早上,打开PortableAPPs时,它提示我升级FireFox,跟往常一样我没考虑就升级了. 打开Firefox 57神速,很是惊喜,打开后发现悲剧了,自己(通过下载插件)定制的功能都不能使用了 ...
- 第一周C语言作业
一.PTA实验作业 题目1.温度转换 1.实验代码 int main() { int fahr = 150,celsius; celsius = 5 * (fahr - 32) / 9; printf ...