HDU1251(静态维护字典树模板题)
2017-09-26 20:21
411 查看
字典树入门还是很简单了,30分钟就差不多可以手撕动态维护的板子了。但是这个题用动态维护字典树会MLE,几乎网上所有动态维护的都TLE了。可怕,就算释放也会(虽然只有一次建树,释不释放一个样子)。于是继续学习静态维护字典树。其实静态维护就是用数组模拟建树,答题思路类似链式前向星。
静态维护的时候还要注意数组开的大小,一开始大方100万数字,MLE。84000K,题目要求65535K
别太大方,50万就可以了。
code:
静态维护的时候还要注意数组开的大小,一开始大方100万数字,MLE。84000K,题目要求65535K
别太大方,50万就可以了。
code:
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<iostream> #include<string> #include <set> #include<time.h> using namespace std; #define ll long long #define mem(a) memset(a,0,sizeof(a)) const double eps=1e-8; const int maxn=500010;//ÐëÌîд const int inf=0x3f3f3f3f; int tree[maxn][26]; int tim[maxn]; int cnt; void init() { mem(tree); cnt=0; } void inst(char str[]) { int len=strlen(str); int index=0; for(int i=0;i<len;i++) { int num=str[i]-'a'; if(tree[index][num]==0) { tree[index][num]=++cnt; } index=tree[index][num]; tim[index]++; } } int treefind(char str[]) { int len=strlen(str); int index=0; for(int i=0;i<len;i++) { int num=str[i]-'a'; if(tree[index][num]==0) return 0; index=tree[index][num]; } return tim[index]; } int main() { init(); char str[20]; int res; while(gets(str)&&strcmp(str,"")!=0) { inst(str); } while(scanf("%s",str)!=EOF) { res=treefind(str); printf("%d\n",res); } return 0; }
相关文章推荐
- 字典树模板(HDU1251)
- HDU1251 字典树模板题,数组版和指针版
- hdu1251(map用法/字典树模板)
- 字典树模板(hdu1251)
- hdu2846(动态字典树||静态字典树 模板)Repository
- Phone List (POJ_3630) 静态字典树 + 模板题
- HDU:1251-统计难题(字典树模板,动态建树,静态建树)
- 【Trie】Trie字典树模板 静态指针池、数组写法
- HDU1251 统计难题(字典树模板题--数组实现+指针实现)
- hdu1251 统计难题 字典树插入,查询模板和空间释放
- 使用freemarker实现静态模板维护及动态内容展示案例
- 字典树模板--静态 ----HDU 1251
- Splay 区间信息的维护与查询 静态模板
- hdu1251-统计难题-字典树模板题
- 字典树模板题&hdu1251
- 统计难题 hdu1251 静态版字典树
- C++——字典树(Trie树)模板——统计难题(HDU1251)
- POJ3630/HDU-1671 Phone List,字典树静态建树!
- Xor Sum---hdu4825(01字典树模板)
- 字典树模板