hdu 1880 魔咒词典(字符串hash)

题目链接:hdu 1880 魔咒词典

题意:

给你一个10w的词典,让你输出对应的字段。

题解:

map暴力存字符串肯定会卡内存,这里用BKDR字符串hash一下,用map映射一下。

 1 #include<bits/stdc++.h>
 2 #define F(i,a,b) for(int i=a;i<=b;++i)
 3 using namespace std;
 4 typedef unsigned long long ull;
 5
 6 const int N=1e5+7,seed=1331;
 7 char tmp[200],str[200],mo[N][25],gong[N][90];
 8 int ed,n;
 9 map<ull,int>cnt1;
10 map<ull,int>cnt2;
11
12 inline int idx(char x)
13 {
14     if(x==‘ ‘)return 1;
15     return x-‘a‘+2;
16 }
17
18 ull ask(char *s)
19 {
20     ull now=0;
21     for(int i=0;s[i]!=0;i++)
22     {
23         now+=now*seed+idx(s[i]);
24     }
25     return now;
26 }
27
28 void ins()
29 {
30     int now=0;
31     for(int i=1;tmp[i]!=0;i++)
32     {
33         if(tmp[i]==‘]‘)
34         {
35             str[now]=0;
36             cnt1[ask(str)]=++ed;
37             strcpy(mo[ed],str);
38             now=0;
39             i+=2;
40         }
41         str[now++]=tmp[i];
42     }
43     str[now]=0;
44     cnt2[ask(str)]=ed;
45     strcpy(gong[ed],str);
46 }
47
48 int main()
49 {
50     while(gets(tmp))
51     {
52         cnt1.clear(),cnt2.clear();
53         ed=0;
54         ins();
55         while(1)
56         {
57             gets(tmp);
58             if(tmp[0]==‘@‘)break;
59             ins();
60         }
61         scanf("%d",&n);
62         getchar();
63         F(i,1,n)
64         {
65             gets(tmp);
66             if(tmp[0]==‘[‘)
67             {
68                 int now=0;
69                 for(int j=1;tmp[j]!=‘]‘;j++)str[now++]=tmp[j];
70                 str[now]=0;
71                 ull tp=ask(str);
72                 int cur=cnt1[tp];
73                 if(cur)printf("%s\n",gong[cur]);
74                 else puts("what?");
75             }else
76             {
77                 ull tp=ask(tmp);
78                 int cur=cnt2[tp];
79                 if(cur)printf("%s\n",mo[cur]);
80                 else puts("what?");
81             }
82         }
83     }
84     return 0;
85 }

时间: 2024-10-26 04:42:28

hdu 1880 魔咒词典(字符串hash)的相关文章

HDU 1880 魔咒词典 (Hash)

魔咒词典 Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 16641    Accepted Submission(s): 3916 Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所

hdu 1880 魔咒词典

题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1880 魔咒词典 Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. 给你一部魔咒词典.当哈利听到一个魔咒时,你的程序必须告诉他那个魔咒的功能:当哈利需要某个功能但不知道该用什么魔咒时,你的程序要替他找到相应的魔咒.如果他要的魔咒不在词典中,就输

魔咒词典(hdu 1880)

Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. 给你一部魔咒词典.当哈利听到一个魔咒时,你的程序必须告诉他那个魔咒的功能:当哈利需要某个功能但不知道该用什么魔咒时,你的程序要替他找到相应的魔咒.如果他要的魔咒不在词典中,就输出“what?” Input 首先列出词典中不超过100000条不同的魔咒词条,每条格式为: [魔

魔咒词典------HDOJ杭电1880(字符串的处理,很简单)

Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. 给你一部魔咒词典.当哈利听到一个魔咒时,你的程序必须告诉他那个魔咒的功能:当哈利需要某个功能但不知道该用什么魔咒时,你的程序要替他找到相应的魔咒.如果他要的魔咒不在词典中,就输出"what?" Input 首先列出词典中不超过100000条不同的魔咒词条,每条格式

题目1029:魔咒词典(map使用以及字符串读取函数总结)

题目链接:http://ac.jobdu.com/problem.php?pid=1029 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus // // 1029 魔咒词典.cpp // Jobdu // // Created by PengFei_Zheng on 30/04/2017. // Copyright © 2017 PengFei_Zheng. All rights reserved. // #include <stdio.h> #

魔咒词典

hdu1880:http://acm.hdu.edu.cn/showproblem.php?pid=1880 题意:中文题,直接看题. 题解:第一法用hash做的的题目.虽然用了很长时间,但是还是AC了.而且用了string 所以有点慢. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 char

C++之路进阶——HDU1880(魔咒词典)

---恢复内容开始--- New~ 欢迎参加2016多校联合训练的同学们~ 魔咒词典 Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12371    Accepted Submission(s): 3019 Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很

九度oj 题目1029:魔咒词典

题目描述:     哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. 给你一部魔咒词典.当哈利听到一个魔咒时,你的程序必须告诉他那个魔咒的功能:当哈利需要某个功能但不知道该用什么魔咒时,你的程序要替他找到相应的魔咒.如果他要的魔咒不在词典中,就输出“what?” 输入: 首先列出词典中不超过100000条不同的魔咒词条,每条格式为: [魔咒] 对应功能 其中“魔

ACM1880魔咒词典

魔咒词典 Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. 给你一部魔咒词典.当哈利听到一个魔咒时,你的程序必须告诉他那个魔咒的功能:当哈利需要某个功能但不知道该用什么魔咒时,你的程序要替他找到相应的魔咒.如果他要的魔咒不在词典中,就输出“what?” Input 首先列出词典中不超过100000条不同的魔咒词条,每条格式