hdu 1880 魔咒字典
https://vjudge.net/problem/HDU-1880
题意:略
思路:
一开始就是想到了正确的思路,但是代码写炸了,死活过不了。这题嘛,就是建议一个魔咒与咒语的双向映射。首先用字符串hash将魔咒与咒语的hash值给算出来,之后用两个map保存魔咒的hash与魔咒下标,咒语的hash与咒语的下标。hash用的是优秀的bkdr算法,好写而且不容易冲突。最后查询的时候有一个技巧,就是如果说以’[‘开头,那么肯定是魔咒,就输出咒语,反之输出魔咒。一开始确实是没有想到如果说魔咒的hash和咒语的hash冲突了怎么办,那么就用上面所说的那个技巧就可以完美解决。
代码:
1 #include <stdio.h> 2 #include <string.h> 3 #include <map> 4 using namespace std; 5 6 const int maxn = 100005; 7 int num = 0; 8 9 char mz[maxn][50]; 10 char zy[maxn][100]; 11 12 map<int,int> mpmz,mpzy; 13 14 unsigned int myhash(char* s) 15 { 16 unsigned int seed = 131; 17 unsigned int h = 0; 18 19 while (*s) 20 { 21 h = h * seed + (*s++); 22 } 23 24 return (h & 0x7FFFFFFF); 25 } 26 27 void init(void) 28 { 29 for (int i = 1;i < num;i++) 30 { 31 mpmz[myhash(mz[i])] = i; 32 mpzy[myhash(zy[i])] = i; 33 34 //printf("%d**\n",myhash(mz[num])); 35 //printf("%d**\n",myhash(zy[num])); 36 } 37 } 38 39 int main() 40 { 41 num = 1; 42 43 while (1) 44 { 45 scanf("%s",mz[num]); 46 47 if (mz[num][0] == '@') break; 48 49 getchar(); 50 51 gets(zy[num]); 52 53 //printf("%s$$\n",zy[num]); 54 55 num++; 56 } 57 58 init(); 59 60 int n; 61 62 scanf("%d",&n); 63 64 getchar(); 65 66 while (n--) 67 { 68 char t[100]; 69 70 gets(t); 71 72 if (t[0] == '[') 73 { 74 int tmp = mpmz[myhash(t)]; 75 76 //printf("%d**\n",myhash(t)); 77 78 if (tmp == 0) printf("%s\n","what?"); 79 else printf("%s\n",zy[tmp]); 80 } 81 else 82 { 83 int tmp = mpzy[myhash(t)]; 84 85 //printf("%d**\n",tmp); 86 87 if (tmp == 0) printf("%s\n","what?"); 88 else 89 { 90 for (int j = 1;j < strlen(mz[tmp]) - 1;j++) 91 printf("%c",mz[tmp][j]); 92 93 printf("\n"); 94 } 95 } 96 } 97 98 return 0; 99 }
hdu 1880 魔咒字典相关推荐
- hdu 1880 魔咒词典
魔咒词典 Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 杭电acm 1880魔咒词典(水题)
魔咒词典 Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 实训三#3.3魔咒字典
[问题描述] 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. ...
- 『杭电1880』魔咒词典
Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔 ...
- HDU1880 魔咒词典【文本处理】
魔咒词典 Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- ccf练习-魔咒词典(字符串分割,<map>存储)
[问题描述] 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. ...
- 魔咒词典题解——牛客
https://www.nowcoder.com/questionTerminal/c6ca566fa3984fae916e6d7beae8ea7f?orderByHotValue=1&mut ...
- 【刷题】BZOJ 4516 [Sdoi2016]生成魔咒
Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例 ...
- 程序员如何打破35岁魔咒
大家好,我是一哥.今天跟大家聊聊程序员35岁以后的方向怎么选? 作为程序员,行业内一直流传着35岁的魔咒,那么大龄程序员该如何跨过35岁这道坎?一哥离35岁也不远了,思考后和大家一起聊一聊~ 从目前一 ...
- [ACM] hdu 1671 Phone List (字典树)
[ACM] hdu 1671 Phone List (字典树) Phone List Problem Description Given a list of phone numbers, determ ...
最新文章
- Docker的原理及特性介绍
- IT技术人生路之我的大学--我技术方向的转变
- php 配置文件加密工具类,SpringBoot集成Jasypt安全框架以及配置文件内容加密(代码示例)...
- 一个浏览器插件,测试xpath的工具
- 我的MIDAS中间层服务器运行效果图
- 如何动态添加修改删除定时任务
- KMP算法详解及各种应用
- Maven--资源文件resource的问题
- 2019蓝桥杯省赛---java---C---5(最大降雨量)
- javafx中的tree_JavaFX中的塔防(4)
- js 读取php文件内容为空,PHP 读取文件内容代码(txt,js等)
- Mysql数据库Sql语句执行效率-Explain
- 钣金cad插件_ug,CAD,SolidWorks,钣金??????非标等设计
- Hive基本原理及环境搭建
- Systemview5安装的问题:the license for this version of systemview has expired......
- 淘宝买家和卖家的经典对话
- 晶振的匹配电容计算公式
- Android APP极限瘦身—— WebP 图片优化
- 锁定计算机后qq能远程吗,如何通过QQ进行远程控制(利用QQ远程协助在不同网络下远程控制电脑)...
- 适合中小型企业的OA系统网上试用整理