hdu 1880 魔咒词典 (字符串哈希)
魔咒词典
Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9381 Accepted Submission(s): 2405
给你一部魔咒词典。当哈利听到一个魔咒时,你的程序必须告诉他那个魔咒的功能;当哈利需要某个功能但不知道该用什么魔咒时,你的程序要替他找到相应的魔咒。如果他要的魔咒不在词典中,就输出“what?”
[魔咒] 对应功能
其中“魔咒”和“对应功能”分别为长度不超过20和80的字符串,字符串中保证不包含字符“[”和“]”,且“]”和后面的字符串之间有且仅有一个空格。词典最后一行以“@END@”结束,这一行不属于词典中的词条。
词典之后的一行包含正整数N(<=1000),随后是N个测试用例。每个测试用例占一行,或者给出“[魔咒]”,或者给出“对应功能”。
1 #include<iostream> 2 #include<stdio.h> 3 #include<cstring> 4 #include<cstdlib> 5 #include<algorithm> 6 using namespace std; 7 8 const int MAX = 100007; 9 bool Hash1[MAX]; 10 bool Hash2[MAX]; 11 int num1[MAX],num2[MAX]; 12 int val1[MAX],val2[MAX]; 13 char xx1[100002][22];int xlen1,cur; 14 char xx2[100002][82];int xlen2; 15 16 void Insert(int x,bool *hash,int *num,int *val,int len) 17 { 18 int k=x%MAX; 19 while(hash[k]==true && num[k]!=x) 20 { 21 k++; 22 if(k==MAX) k=k-MAX; 23 } 24 if(hash[k]==false) 25 { 26 hash[k]=true; 27 num[k]=x; 28 val[k]=len; 29 } 30 } 31 bool found(int x,bool *hash,int *num,int *val) 32 { 33 int k=x%MAX; 34 while(hash[k]==true && num[k]!=x) 35 { 36 k++; 37 if(k==MAX) k=k-MAX; 38 } 39 if(num[k]==x) 40 { 41 cur=val[k]; 42 return true; 43 } 44 return false; 45 } 46 // ELF Hash Function 47 unsigned int ELFHash(char *str) 48 { 49 unsigned int hash = 0; 50 unsigned int x = 0; 51 while (*str) 52 { 53 hash = (hash << 4) + (*str++); 54 if ((x = hash & 0xF0000000L) != 0) 55 { 56 hash ^= (x >> 24); 57 hash &= ~x; 58 } 59 } 60 return (hash & 0x7FFFFFFF); 61 } 62 int main() 63 { 64 char c[150],b[20]; 65 int i,j,k,n,m; 66 while(gets(c)) 67 { 68 xlen1=-1; 69 xlen2=-1; 70 memset(Hash1,false,sizeof(Hash1)); 71 memset(Hash2,false,sizeof(Hash2)); 72 memset(num1,-1,sizeof(num1)); 73 memset(num2,-1,sizeof(num2)); 74 75 while(strcmp(c,"@END@")!=0) 76 { 77 n=strlen(c); 78 for(i=1,j=0;i<n;i++) 79 { 80 b[j++]=c[i]; 81 if(c[i]==']') 82 { 83 b[--j]='\0'; 84 k=ELFHash(b); 85 xlen1++; 86 Insert(k,Hash1,num1,val1,xlen1); 87 strcpy(xx1[xlen1],b); 88 break; 89 } 90 } 91 k=ELFHash(c+i+2); 92 xlen2++; 93 Insert(k,Hash2,num2,val2,xlen2); 94 strcpy(xx2[xlen2],c+i+2); 95 gets(c); 96 } 97 scanf("%d",&m); 98 getchar(); 99 while(m--) 100 { 101 gets(c); 102 n=strlen(c); 103 if(c[0]=='[') 104 { 105 c[n-1]='\0'; 106 k=ELFHash(c+1); 107 if( found(k,Hash1,num1,val1) ) 108 printf("%s\n",xx2[cur]); 109 else printf("what?\n"); 110 } 111 else 112 { 113 k=ELFHash(c); 114 if( found(k,Hash2,num2,val2) ) 115 printf("%s\n",xx1[cur]); 116 else printf("what?\n"); 117 } 118 } 119 } 120 return 0; 121 }
转载于:https://www.cnblogs.com/tom987690183/p/3597143.html
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 ...
- 字符串哈希(魔咒词典hdu1880)
魔咒词典(字符串哈希) 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你 ...
- ccf练习-魔咒词典(字符串分割,<map>存储)
[问题描述] 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. ...
- 魔咒词典---哈希+二分
题目: 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. 给你一 ...
- 『杭电1880』魔咒词典
Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔 ...
- HDU1880 魔咒词典【文本处理】
魔咒词典 Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- 魔咒词典(C/C++)
题目描述 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. ...
- 湖南大学21夏训练三3.魔咒词典
[问题描述] 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. ...
- C++映射——魔咒词典
题目描述 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. ...
最新文章
- Docker 入门系列(4)- Docker 数据管理(挂载目录、挂载文件、数据卷挂载、数据卷共享、数据卷删除、数据卷容器备份和恢复)
- 【EventBus】EventBus 事件总线框架简介 ( EventBus 使用流程 )
- 静态页面公共部分的处理
- 虚拟机中的Linux安装VMware Tools的方法
- [Leetcode][第459题][JAVA][重复的字符串][子串][匹配]
- badboy设置中文_[转载]Badboy使用教程
- airflow 進行後端大數據中ETL處理(草稿)
- 设计模式之观察者模式(c++)
- FHIR标准和国际基于FHIR的互联互通实践(1):如何定义互联互通?
- pandas教程(上)
- [C/C++11]_[初级]_[如何转换带井号的#十六进制颜色字符串到数值]
- 从事IT业一个8年老兵转行前的自我总结2——从《易经》说开来
- ZigBee网络信标(Beacon)和非信标(Non-beacon)两种工作模式
- 【已补蓝奏云链接】PyTorch中MNIST数据集(附datasets.MNIST离线包)下载慢/安装慢的解决方案
- UWP Brush画笔详解
- OpenCV利用滑动条实现一个开关
- 【Solidity】8. 杂项 - 深入理解Solidity
- SpringBoot与拦截器
- c语言在数组输出字母,c语言字符数组与字符串的使用详解
- 2020德勤面试开始了吗_德勤Deloitte 2020秋招详细招聘流程‼️