hdu1251 统计难题(字典树)
2015-11-07 14:46
501 查看
题目点我点我点我
模版式的字典树,没啥好说的,只是hdu有个巨坑,用G++提交会boom内存,改用C++提交就AC……一开始改了N遍,快抓狂的时候点了一下讨论区,发现都这样or2……还是不懂为神马
模版式的字典树,没啥好说的,只是hdu有个巨坑,用G++提交会boom内存,改用C++提交就AC……一开始改了N遍,快抓狂的时候点了一下讨论区,发现都这样or2……还是不懂为神马
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <algorithm> using namespace std; #define maxn 26 typedef struct Trie { int v; Trie *next[maxn]; }Trie; Trie *root; void creattrie(char *str) { Trie *p=root,*q; int len=strlen(str); for(int i=0;i<len;i++) { int id=str[i]-'a'; if(p->next[id]==NULL) { q=(Trie *)malloc(sizeof(Trie)); for(int j=0;j<26;j++) q->next[j]=NULL; q->v=1; p->next[id]=q; p=p->next[id]; } else { p->next[id]->v++; p=p->next[id]; } } } int findtrie(char *str) { int len=strlen(str); Trie *p=root; for(int i=0;i<len;i++) { int id=str[i]-'a'; p=p->next[id]; if(p==NULL) return 0; } return p->v; } int deltrie(Trie *t) { if(t==NULL) return 0; for(int i=0;i<maxn;i++) { if(t->next[i]!=NULL) deltrie(t->next[i]); } free(t); return 0; } int main() { int i; char str[11]; root=(Trie *)malloc(sizeof(Trie)); for(i=0;i<maxn;i++) root->next[i]=NULL; while(gets(str)&&str[0]!='\0') creattrie(str); memset(str,0,sizeof(str)); while(~scanf("%s",str)) { int ans=findtrie(str); printf("%d\n",ans); } deltrie(root); return 0; }
相关文章推荐
- ZOj 3471 Most Powerful 状态压缩DP
- iOS多线程编程之NSThread的使用
- java基础
- V210调整根分区大小
- Swift - 自动优化照片,改善图像质量
- Best Meeting Point 解答
- 单例模式
- 国嵌嵌入式学习笔记之刷机
- 欢迎使用CSDN-markdown编辑器
- Week2-7Preprocessing
- NSUserDefaults简介及使用
- Markdown 简明教程
- U盘只剩下快捷方式
- Intellij IDEA配置Android Annotations注解 4000 框架
- OutOfMemoryError异常
- 国嵌嵌入式学习笔记之学习方法
- js限制文本框只能输入数字方法小结
- Swift分支结构
- 网页实现身份验证功能nginx
- Unity关于对象池的使用