hdu3613 extend-kmp(Trie入门)
2016-03-15 21:56
288 查看
原题链接
Sample Input
banana
band
bee
absolute
acm
ba
b
band
abc
Sample Output
2
3
1
0
题意:
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串。
思路:
第一部分输入,不断根据输入s建立Trie树。
第二部分,对于每一个输入,输出searchTrie的结果。
代码:
Sample Input
banana
band
bee
absolute
acm
ba
b
band
abc
Sample Output
2
3
1
0
题意:
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串。
思路:
第一部分输入,不断根据输入s建立Trie树。
第二部分,对于每一个输入,输出searchTrie的结果。
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define MAX 26 typedef struct TrieNode { int num; struct TrieNode *next[MAX]; }TrieNode; TrieNode Tree[1111111]; int allocp=0; TrieNode *creatTrieNode() { TrieNode *temp=& Tree[allocp++]; temp->num=1; for(int i=0;i<MAX;i++) temp->next[i]=NULL; return temp; } void InsertTrie(TrieNode **Root,char *str) { TrieNode *temp=*Root; int i=0,k; while(str[i]) { k=str[i]-'a'; if(temp->next[k]) { temp->next[k]->num++; } else{ temp->next[k]=creatTrieNode(); } temp=temp->next[k]; i++; } } int searchTrie(TrieNode *root,char *str) { if(root==NULL) { return 0; } TrieNode *temp=root; int i=0,k; while(str[i]) { k=str[i]-'a'; if(temp->next[k]){ temp=temp->next[k]; } else return 0; i++; } return temp->num; } int main() { char s[11]; TrieNode *root=creatTrieNode(); while(gets(s)) { if(!strlen(s)) { break; } InsertTrie(&root,s); } while(scanf("%s",&s)!=EOF) { int ans=searchTrie(root,s); printf("%d\n",ans); } return 0; }
相关文章推荐
- Java处理异常原则
- 开通博客,纪念一下
- 阿里移动安全2015年第二季度报告
- dorado7的学习3月15
- 冒泡排序、选择排序和插入排序--由小到大,,由大到小
- poj2352+2481 stars+cows 树状数组
- Parcelable 序列化和反序列化
- 内连接,外连接,交叉连接
- POJ 3349-Snowflake Snow Snowflakes-字符串哈希
- 检测光纤的同心性
- oracle Long数据类型总结
- EventBus3.0最新使用文档详解
- 手机通过wifi访问电脑的共享文件
- ViewPager详解(三)——自动轮播图片小于三张的问题解决
- 一张图解AlphaGo原理及弱点
- PAT 1007. Maximum Subsequence Sum (25)
- 一张图解AlphaGo原理及弱点
- 函数对象/仿函数
- ViewPager详解(三)——自动轮播图片小于三张的问题解决
- ubantu配置nginx绑定域名以及与node.js的相互配合