魔咒词典

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 str[100002][30];
 7 int n,top;
 8 string line[100002];
 9 struct Node{
10   long long val;
11   int id;
12   bool operator<(const Node a)const {
13     return val<a.val;
14     }
15 }num[2][100002];
16 long long hash1[2][100002];
17 long long t1,t2;
18 string line2;
19 int solve(int flag,long long val){
20     int l=1,r=top;
21     while(l<r){
22     int mid=(l+r)/2;
23     if(num[flag][mid].val>=val)
24         r=mid;
25     else
26         l=mid+1;
27     }
28     return num[flag][l].id;
29 }
30 int main(){
31      top=0;
32      memset(num,0,sizeof(num));
33    while(~scanf("%s",str[++top])){
34        if(str[top][0]==‘@‘){
35            top--;
36             break;
37        }
38         getchar();
39       getline(cin,line[top]);
40       int len=strlen(str[top]);
41         t1=t2=0;
42         for(int i=0;i<len;i++){
43             t2=t1*13+(int)str[top][i];
44             t1=t2;
45         }
46         hash1[0][top]=t2;
47         num[0][top].val=t2;
48         num[0][top].id=top;
49         len=line[top].length();
50          t1=t2=0;
51         for(int i=0;i<len;i++){
52             t2=t1*13+(int)line[top][i];
53             t1=t2;
54         }
55         num[1][top].val=t2;
56         num[1][top].id=top;
57          hash1[1][top]=t2;
58    }
59    sort(num[0]+1,num[0]+top+1);
60    sort(num[1]+1,num[1]+top+1);
61      scanf("%d",&n);
62      getchar();
63      for(int i=1;i<=n;i++){
64         getline(cin,line2);
65         int ll=line2.length();
66          t1=t2=0;
67         for(int i=0;i<ll;i++){
68             t2=t1*13+(int)line2[i];
69             t1=t2;
70         }
71         int as=0,ans=0;
72         if(line2[0]==‘[‘){
73             as=solve(0,t2);
74             if(hash1[0][as]==t2){
75                 cout<<line[as]<<endl;
76             }
77             else
78                 printf("what?\n");
79         }
80
81         else{
82            as=solve(1,t2);
83             if(hash1[1][as]==t2){
84                ans=as;int tp=strlen(str[as]);
85                for(int j=1;j<tp-1;j++)
86                printf("%c",str[as][j]);
87                printf("\n");
88             }
89             else{
90                  printf("what?\n");
91             }
92
93        }
94      }
95 }

魔咒词典,布布扣,bubuko.com

时间: 2024-08-02 02:49:40

魔咒词典的相关文章

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=133

魔咒词典(hdu 1880)

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

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

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

hdu 1880 魔咒词典

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

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条不同的魔咒词条,每条格式

2008浙大:魔咒词典

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