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种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. 给你一部魔咒词 ...
随机推荐
- angular的$scope的使用
1. 可以在scope中直接使用 // 监听日期变化 $scope.$watch('vaFilter.startEffectiveDate', function(newDate, oldDate, s ...
- 掌握这些知识,你的python水平能更上一层楼(续)
笔者的上一篇python文章阅读量不错,看来python爱好者很多,所以再写一篇,以飨读者. 先接着上一篇讲一个问题,下面这段code有没有问题? def countcalls(func): coun ...
- 【Django】 初步学习
这个系列(或者成不了一个系列..)预计会全程参考Vamei様的Django系列,膜一发.说句题外话,其实更加崇拜像Vamei那样的能够玩转生活.各个领域都能取得不小成就的人. [Django] ■ 概 ...
- 数据库 --> SQL 和 NoSQL 的区别
SQL 和 NoSQL 的区别 一.概念 SQL (Structured Query Language) 数据库,指关系型数据库.主要代表:SQL Server,Oracle,MySQL(开源), ...
- 自己开发的 vue 滑动按钮组件 vue-better-slider
写在前面的 这个人第一次尝试开发并发布一个 vue 的组件,该组件实现了类似 ios 手机淘宝客户端 -> 消息界面中消息的滑动删除功能等,如下为该组件的文档. 一个 Vue 的滑动按钮组件,有 ...
- 将 Shiro 作为应用的权限基础 四:shiro的配置说明
Apache Shiro的配置主要分为四部分: SecurityManager的配置 URL过滤器的配置 静态用户配置 静态角色配置 其中,由于用户.角色一般由后台进行操作的动态数据,比如通过@Req ...
- Matlab绘图基础——用print函数保存图片(Print figure or save to file)
print(figure_handle,'formats','-rnumber','filename') %将图形保存为png格式,分辨率为number的(默认为72),最好指定的分辨率大一点,否则 ...
- 基于以太坊开发的类似58同城的DApp开发与应用案例
今天,Origin开发团队很高兴地宣布在以太坊Rinkeby测试网络上推出Origin Protocol Demo DApp ! 在这个DApp中,你可以在不同垂直行业的solidarity econ ...
- oracle的卸载
1.停止所有与ORACLE相关的服务. 2. 使用OUI(Oracle Universal Installer)卸载Oracle软件. "开始"->"程序" ...
- Java并发编程实战(chapter_2)(对象发布、不变性、设计线程安全类)
一.发布与溢出 "发布(Publish)"一个对象的意思是指,使对象能够在当前作用于之外的代码中使用.这个"之外",尤为关键,各种出问题的地方,都是因为这个&q ...