Codevs 4189 字典(字典树Trie)
4189 字典
时间限制: 1 s
空间限制: 256000 KB
题目等级 : 大师 Master
传送门
题目描述 Description
最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n个单词(1<=n<=200000)
现在skyzhong需要在字典里查询以某一段字母开头的单词
如:skyzhong想查询a
那么只要是a开头的单词就可以了
skyzhong只想知道里面有没有这一个单词(因为没有他就不查了)
若有,请输出YES。若没有,请输出NO
输入描述 Input Description
第一行一个数n
第二行到第n+1行,一行一个字符串
再下一行一个数m,表示skyzhong想要查询的次数
接着m行,一行一个字符串,表示skyzhong想要查的东西
输出描述 Output Description
共m行,若有这字串输出YES,否则输出NO
样例输入 Sample Input
3
asd
asfdghj
asfd
3
asd
asdghj
asf
样例输出 Sample Output
YES
NO
YES
数据范围及提示 Data Size & Hint
字符串只有小写字母,且长度≤8
/*
字典树模板(前缀查询).
查询某个单词的前缀是否出现过
因为当查询如字符串abc是否为某个字符串的前缀时,
显然以b、c、d....等不是以a开头的字符串就不用查找了,
这样迅速缩小查找的范围和提高查找的针对性。
所以建立Trie的复杂度为O(n*len),
而建立+查询在trie中是可以同时执行的,
建立的过程也就可以成为查询的过程,
hash就不能实现这个功能.
所以总的复杂度为O(n*len),
实际查询的复杂度只是O(len).
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 300001
#define MAXM 1001
using namespace std;
char s[MAXM];
struct data
{
int next[27];//next是一个指针数组,存放着指向各个孩子结点的指针
bool b;
}tree[MAXN];
int m,n,tot;
void Add_vertex()
{
int l=strlen(s);
int now=0;
for(int i=0;i<l;i++)
{
int x=s[i]-'a'+1;
if(tree[now].next[x])
now=tree[now].next[x];
else
{
tot++;
tree[now].next[x]=tot;
now=tot;
}
}
tree[now].b=true;
}
int find()
{
int l=strlen(s);
int now=0,p=0,sum=0;
while(p<l)
{
if(tree[now].next[s[p]-'a'+1])
{
now=tree[now].next[s[p]-'a'+1];
p++;
continue;
}
return 0;
}
return 1;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s;
Add_vertex();
}
cin>>m;
memset(s,0,sizeof(s));
for(int i=1;i<=m;i++)
{
cin>>s;
int jd=find();
if(jd) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
Codevs 4189 字典(字典树Trie)的更多相关文章
- 【转】B树、B-树、B+树、B*树、红黑树、 二叉排序树、trie树Double Array 字典查找树简介
B 树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: ...
- codevs 1729 单词查找树
二次联通门 : codevs 1729 单词查找树 /* codevs 1729 单词查找树 Trie树 统计节点个数 建一棵Trie树 插入单词时每新开一个节点就计数器加1 */ #include ...
- 字典树(Trie树)的实现及应用
>>字典树的概念 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树.与二叉查找树不同,Trie树的 ...
- [POJ] #1002# 487-3279 : 桶排序/字典树(Trie树)/快速排序
一. 题目 487-3279 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 274040 Accepted: 48891 ...
- 『字典树 trie』
字典树 (trie) 字典树,又名\(trie\)树,是一种用于实现字符串快速检索的树形数据结构.核心思想为利用若干字符串的公共前缀来节约储存空间以及实现快速检索. \(trie\)树可以在\(O(( ...
- 字典树trie学习
字典树trie的思想就是利用节点来记录单词,这样重复的单词可以很快速统计,单词也可以快速的索引.缺点是内存消耗大 http://blog.csdn.net/chenleixing/article/de ...
- 字典树(Trie)详解
详解字典树(Trie) 本篇随笔简单讲解一下信息学奥林匹克竞赛中的较为常用的数据结构--字典树.字典树也叫Trie树.前缀树.顾名思义,它是一种针对字符串进行维护的数据结构.并且,它的用途超级广泛.建 ...
- 字典树 trie
Trie树 Trie树,就是字母树.Trie树是多叉树,每个节点为一个字母.其根节点为象征节点(就是说没有含义,但是存在这个节点),从根节点开始建立,每个节点至多为26个子节点(不要我说 ...
- Atitit 常见的树形结构 红黑树 二叉树 B树 B+树 Trie树 attilax理解与总结
Atitit 常见的树形结构 红黑树 二叉树 B树 B+树 Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 ...
- K:单词查找树(Trie)
单词查找树,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串.Trie可以看作是一个确定有限状态自动机(DFA).与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中 ...
随机推荐
- POJ2689 - Prime Distance(素数筛选)
题目大意 给定两个数L和U,要求你求出在区间[L, U] 内所有素数中,相邻两个素数差值最小的两个素数C1和C2以及相邻两个素数差值最大的两个素数D1和D2,并且L-U<1,000,000 题解 ...
- Kooboo CMS 介绍
Kooboo的定位是一个CMS,内容管理平台,从更严格意义上来说,它更应该网站快速开发平台.针对一般网站开发过程的分析和提炼,着重在解决网站的一般需求,提出一套快速开发网站的理念和方法.在这些理念和方 ...
- MariaDB-5.5.33a 编译安装
交代一下内核的信息 [root@localhost soft]# uname -r 2.6.32-71.el6.x86_64 创建mariadb用户组 [root@localhost mariadb- ...
- [二]SpringMvc实践-注解
1.@RequestMapping("/list")映射访问路径 2.@RequestParam(value="id",required=false)请求参数, ...
- CSS3最简洁的轮播图
<!DOCTYPE html> <html> <head> <title>CSS3最简洁的轮播图</title> <style> ...
- Codeforces Round #382 (Div. 2)E. Ostap and Tree
E. Ostap and Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- 三角形div的原理
三角形div原理 首先我们写一个正常的方形div样式,但是我们把它的宽度和高度都设置为零,并且边框线设置的粗一点: { width:0px: height:0px; Border:20px solid ...
- ABAP程序相互调用--SUBMIT
(1) 调用其他程序: * Trigger the IDOC SUBMIT zpcppmd001_idoc AND RETURN. (2) 调用其他程序参数传递参数: *当被调用的程序的屏幕有输入参数 ...
- 使用bash判断PATH中是否存在某个路径
在source设置环境变量的时候,有些时候可能会设置两次,导致增加系统的路径搜索时间,或者让自己看环境变量的时候搞得怪不爽的. 为了解决这个问题,我们可以在设置相应的环境变量之前,先判断一下是否已经设 ...
- IC芯片
5.8寸显示屏/LB058WQ1(SD)01LG2 74HC04 0.3NXP10K 74HC138 0.37NXP20K 74HC245 0.52NXP30K 74HC595 明威 ...