HDU-1251 统计难题(字典树)
来源:互联网 发布:知彼定位 编辑:程序博客网 时间:2024/04/28 04:11
统计难题
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submission(s): 32329 Accepted Submission(s): 12349
Problem Description
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
Input
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.
注意:本题只有一组测试数据,处理到文件结束.
注意:本题只有一组测试数据,处理到文件结束.
Output
对于每个提问,给出以该字符串为前缀的单词的数量.
Sample Input
bananabandbeeabsoluteacmbabbandabc
Sample Output
2310/*nxt[i]中记录该节点中下个节点是否存在'a'+i,v记录该节点出现的次数*/#include<cstdio>#include<string.h>const int maxn = 1e6 + 5;struct node{ int nxt[26]; int v; void Init(){ memset(nxt,-1,sizeof(nxt)); v=0; }}L[maxn];int tot=0;void add(char a[],int len){ int now=0; for(int i=0;i<len;i++){ int tmp=a[i]-'a'; if(L[now].nxt[tmp]==-1) { L[++tot].Init(); L[now].nxt[tmp]= tot; } now=L[now].nxt[tmp]; L[now].v++; }}int query(char a[],int len){ int now=0; for(int i=0;i<len;i++){ int tmp=a[i]-'a'; if(L[now].nxt[tmp]==-1) return 0; now=L[now].nxt[tmp]; } return L[now].v;}int main(){ char st[15]; L[0].Init(); //freopen("in.txt","r",stdin); while(gets(st)){ if(strlen(st)==0) break; add(st,strlen(st)); } while(gets(st)) printf("%d\n",query(st,strlen(st))); return 0;}
0 0
- HDU 1251 统计难题 字典树
- HDU 1251统计难题(字典树)
- [字典树 ]hdu 1251 统计难题
- 统计难题 hdu 1251 字典树
- hdu 1251 统计难题 字典树
- HDU 1251 统计难题 -- 字典树
- HDU 1251 统计难题(字典树)
- hdu 1251 统计难题(字典树)
- hdu 1251 统计难题(字典树)
- hdu 1251 统计难题(字典树)
- hdu-1251-统计难题(字典树)
- hdu 1251 统计难题 (字典树)
- HDU 1251统计难题 字典树
- hdu 1251 统计难题 (字典树)
- HDU 1251 统计难题(字典树)
- hdu 1251 统计难题 字典树
- hdu 1251 统计难题 字典树
- hdu 1251 统计难题 (字典树)
- 小游戏之扫雷
- 2016这些Android技术可能会很火
- 条件概率
- python核心编程第五章练习
- uva 537
- HDU-1251 统计难题(字典树)
- 艰难的起步
- Memory Card、逻辑加密卡、CPU卡
- C#将wps表格读到datatable中并显示在页面
- 大话设计模式15----抽象工厂模式
- warning C4305:“初始化”:从“double”到“float”截断
- Android 中 Canvas 绘图之 Shader 使用图文详解
- Linux - ncat ssl backdoor
- SQLSERVER触发器内INSERT,UPDATE,DELETE三种状态