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 魔咒字典相关推荐

  1. hdu 1880 魔咒词典

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

  2. 杭电acm 1880魔咒词典(水题)

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

  3. 实训三#3.3魔咒字典

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

  4. 『杭电1880』魔咒词典

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

  5. HDU1880 魔咒词典【文本处理】

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

  6. ccf练习-魔咒词典(字符串分割,<map>存储)

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

  7. 魔咒词典题解——牛客

    https://www.nowcoder.com/questionTerminal/c6ca566fa3984fae916e6d7beae8ea7f?orderByHotValue=1&mut ...

  8. 【刷题】BZOJ 4516 [Sdoi2016]生成魔咒

    Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例 ...

  9. 程序员如何打破35岁魔咒

    大家好,我是一哥.今天跟大家聊聊程序员35岁以后的方向怎么选? 作为程序员,行业内一直流传着35岁的魔咒,那么大龄程序员该如何跨过35岁这道坎?一哥离35岁也不远了,思考后和大家一起聊一聊~ 从目前一 ...

  10. [ACM] hdu 1671 Phone List (字典树)

    [ACM] hdu 1671 Phone List (字典树) Phone List Problem Description Given a list of phone numbers, determ ...

最新文章

  1. Docker的原理及特性介绍
  2. IT技术人生路之我的大学--我技术方向的转变
  3. php 配置文件加密工具类,SpringBoot集成Jasypt安全框架以及配置文件内容加密(代码示例)...
  4. 一个浏览器插件,测试xpath的工具
  5. 我的MIDAS中间层服务器运行效果图
  6. 如何动态添加修改删除定时任务
  7. KMP算法详解及各种应用
  8. Maven--资源文件resource的问题
  9. 2019蓝桥杯省赛---java---C---5(最大降雨量)
  10. javafx中的tree_JavaFX中的塔防(4)
  11. js 读取php文件内容为空,PHP 读取文件内容代码(txt,js等)
  12. Mysql数据库Sql语句执行效率-Explain
  13. 钣金cad插件_ug,CAD,SolidWorks,钣金??????非标等设计
  14. Hive基本原理及环境搭建
  15. Systemview5安装的问题:the license for this version of systemview has expired......
  16. 淘宝买家和卖家的经典对话
  17. 晶振的匹配电容计算公式
  18. Android APP极限瘦身—— WebP 图片优化
  19. 锁定计算机后qq能远程吗,如何通过QQ进行远程控制(利用QQ远程协助在不同网络下远程控制电脑)...
  20. 适合中小型企业的OA系统网上试用整理

热门文章

  1. 如何一个网络连两台计算机,两台电脑用一根网线直连如何配置
  2. Word怎么转PDF?分享三种非常简单的方法
  3. 图SLAM:Noob的同时本地化和映射指南
  4. java中的StringBuffer类
  5. Plant Ecology Journal Club, 2018
  6. 债券收益率预测模型_利率预测模型系列之一:简单的N-S模型运用
  7. 人之最美,纯朴初心,有所不为
  8. Linux 下恢复误删文件
  9. 基于Docker搭建RabbitMQ集群(多台服务器)
  10. c语言错误1083,没有混音设备可用,启动Windows Audio服务时错误1083