[hihoCoder1014]Trie树[前缀树][前缀树的建立]
2015-06-23 23:47
363 查看
题目链接:[hihoCoder1014]Trie树[前缀树][前缀树的建立]
题意分析:就是题目上那么写的题意XD
解题思路:建立前缀树
个人感受:当做模板记下,方便日后回忆。加了些个人注释~
具体代码如下:
题意分析:就是题目上那么写的题意XD
解题思路:建立前缀树
个人感受:当做模板记下,方便日后回忆。加了些个人注释~
具体代码如下:
#include <iostream> #include <cstdio> #include <cstring> #include <string> using namespace std; const int MAXN = 1e6 + 111; int len; //代表总共的节点个数 struct Node{ int cnt; //多少个前缀以这个节点结尾 int nx[26]; //下个字母 void init() //初始化节点 { cnt = 0; memset(nx, -1, sizeof nx); } }node[MAXN]; void insert(char *s) { int i = 0, p = 0; //p 母节点 while (s[i]) { int x = s[i] - 'a'; if (node[p].nx[x] == -1) //如果是新结尾 { node[len].init(); node[p].nx[x] = len++; //node[p].nx[x]的下个节点是 } p = node[p].nx[x]; ++node[p].cnt; //又有新东东以我为结尾啦~ ++i; } } void query(char *s) { int i = 0, p = 0; while (s[i]) { int x = s[i] - 'a'; if (node[p].nx[x] == -1) { puts("0"); return; } p = node[p].nx[x]; ++i; } printf("%d\n", node[p].cnt); } int main() { int n, m; char s[20]; while (~scanf("%d", &n)) { len = 1; node[0].init(); while (n --) { scanf("%s", s); insert(s); } scanf("%d", &m); while (m --) { scanf("%s", s); query(s); } } return 0; }
相关文章推荐
- LeetCode226:Invert Binary Tree
- ThinkPhp学习09
- ThinkPhp学习08
- ThinkPhp学习07
- lucene原理学习笔记(一)
- PHP爬虫(3)PHP DOM开源代码里的大坑和字符编码
- 学习笔记-基础知识8-集合框架(1)上
- C语言复杂声明,指令函数
- ARCH64:怎样恢复函数的栈
- ThinkPhp学习06
- 我的博客,我的梦想
- 路由器做DHCP的两个实验
- 大数据架构和模式(五):利用大数据识别保险行业中的欺诈业务案例
- CF 9C Hexadecimal's Numbers
- Hibernate性能调优--关联实体的延迟加载
- ThinkPhp学习05
- Appium 三种wait方法(appium 学习之改造轮子)
- Visual Assist X 10.8.2048.0破解教程
- scala之尾递归实际用处2
- HDU 2034 人见人爱A-B