博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
#1014 : Trie树 HihoCoder(字典树)
阅读量:5360 次
发布时间:2019-06-15

本文共 2000 字,大约阅读时间需要 6 分钟。

描述

小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。

这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?”

身经百战的小Ho答道:“怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有单词,检查你给我的字符串是不是这个单词的前缀不就是了?”

小Hi笑道:“你啊,还是太年轻了!~假设这本词典里有10万个单词,我询问你一万次,你得要算到哪年哪月去?”

小Ho低头算了一算,看着那一堆堆的0,顿时感觉自己这辈子都要花在上面了...

小Hi看着小Ho的囧样,也是继续笑道:“让我来提高一下你的知识水平吧~你知道树这样一种数据结构么?”

小Ho想了想,说道:“知道~它是一种基础的数据结构,就像说的一样!”

小Hi满意的点了点头,说道:“那你知道我怎么样用一棵树来表示整个词典么?”

小Ho摇摇头表示自己不清楚。

“你看,我们现在得到了这样一棵树,那么你看,如果我给你一个字符串ap,你要怎么找到所有以ap开头的单词呢?”小Hi又开始考校小Ho。

“唔...一个个遍历所有的单词?”小Ho还是不忘自己最开始提出来的算法。

“笨!这棵树难道就白构建了!”小Hi教训完小Ho,继续道:“看好了!”

“那么现在!赶紧去用代码实现吧!”小Hi如是说道

输入

输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英文字母组成,可能存在相同的单词,此时应将其视作不同的单词。接下来的一行为一个正整数m,表示小Hi询问的次数,其后m行,每一行一个字符串,该字符串由不超过10个的小写英文字母组成,表示小Hi的一个询问。

在20%的数据中n, m<=10,词典的字母表大小<=2.

在60%的数据中n, m<=1000,词典的字母表大小<=5.

在100%的数据中n, m<=100000,词典的字母表大小<=26.

本题按通过的数据量排名哦~

输出

对于小Hi的每一个询问,输出一个整数Ans,表示词典中以小Hi给出的字符串为前缀的单词的个数。

样例输入

5babaabbabbbaaaaabbaaaaaabaababaababb5babbbaabaaababbbbbabbaab

样例输出

1

0

3

0

0

思路:板子题

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long intusing namespace std;inline ll gcd(ll a,ll b){ return b?gcd(b,a%b):a;}inline ll lcm(ll a,ll b){ return a/gcd(a,b)*b;}int moth[13]={ 0,31,28,31,30,31,30,31,31,30,31,30,31};int dir[4][2]={ 1,0 ,0,1 ,-1,0 ,0,-1};int dirs[8][2]={ 1,0 ,0,1 ,-1,0 ,0,-1, -1,-1 ,-1,1 ,1,-1 ,1,1};const int inf=0x3f3f3f3f;const ll mod=1e9+7;int tree[1000007][26];int sz;ll value[1000007];int n,m;void init(){ sz=0; memset(tree,0,sizeof(tree)); memset(value,0,sizeof(value));}void insert(string s){ int len=s.length(); int u=0; for(int i=0;i
>n; for(int i=1;i<=n;i++){ string s; cin>>s; insert(s); } cin>>m; for(int i=1;i<=m;i++){ string s; cin>>s; cout<
<

 

转载于:https://www.cnblogs.com/wmj6/p/10466898.html

你可能感兴趣的文章
A/B test
查看>>
Ad Hoc网络概念、特点和比较
查看>>
2018牛客多校第四场 J.Hash Function
查看>>
ZOJ 解题报告索引
查看>>
vim命令
查看>>
运行在 tomcat7.0.88 的应用在Safari浏览器上无法识别回车键、下拉框数据无法加载出来...
查看>>
Java后端进阶教程
查看>>
设计模式(六)抽象工厂模式
查看>>
ListView中动态显示和隐藏Header&Footer
查看>>
2019年Web前端最新导航(常见前端框架、前端大牛)
查看>>
Linux内核分析第十八章读书笔记
查看>>
软工课后作业01 P18第四题
查看>>
MyBatis 详解(一对一,一对多,多对多)
查看>>
软件架构师的工作过程
查看>>
判断设备
查看>>
搞清楚基本问题
查看>>
教你如何一步步将项目部署到Github
查看>>
关于Android圆形图片的一种优化方案(可以显示网络图片)
查看>>
android ui定义自己的dialog(项目框架搭建时就写好,之后事半功倍)
查看>>
Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
查看>>