题目描述 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

 Trie树模板题
 1.指针版
#include<bits/stdc++.h>

#define N 2000010

using namespace std;
//map<string ,int>W; //map淼
int n,m,len,tot,trie[N][],sum[N],v[N];
char s[];
struct node{
int count;
node *next[];
node(){count=,memset(next,,sizeof(next));}
}*rt; void insert(){
node *r=rt;
char *word=s;
while(*word){
int id=*word-'a';
if(r->next[id]==NULL) r->next[id]=new node;//r->next[id]=build();
r=r->next[id];
r->count++;
word++;
}
}
int search(){
node *r=rt;
char *word=s;
while(*word){
int id=*word-'a';
r=r->next[id];
if(r==NULL) return ;
word++;
}return r->count;
} int main()
{
rt=new node;
cin>>n;
for(int i=;i<=n;i++){
cin>>s;
insert();
}cin>>m;
for(int i=;i<=m;i++){
cin>>s;
if(search()!=){
cout<<"YES\n";
}else cout<<"NO\n";
}return ;
}

  

  2.数组模拟

#include<bits/stdc++.h>

#define N 2000010

using namespace std;
//map<string ,int>W; //map淼
int n,m,len,tot,trie[N][],rt,sum[N],v[N];
char s[];
void insert(){
len=strlen(s);
rt=;
for(int i=;s[i];i++){
int id=s[i]-'a';
if(!trie[rt][id]) trie[rt][id]=++tot;
sum[trie[rt][id]]++;
rt=trie[rt][id];
}
}
int search(){
len=strlen(s);
rt=;
for(int i=;s[i];i++){
int id=s[i]-'a';
if(!trie[rt][id]) return ;
rt=trie[rt][id];
}return sum[rt];
}
int main()
{
cin>>n;
for(int i=;i<=n;i++){
cin>>s;
insert();
}cin>>m;
for(int i=;i<=m;i++){
cin>>s;
if(search()!=){
cout<<"YES\n";
}else cout<<"NO\n";
}return ;
}

  3.Map水题版

#include<bits/stdc++.h>

using namespace std;
map<string ,int>W;
int n,m,len;
char s[];
int main()
{
cin>>n;
for(int i=;i<=n;i++){
cin>>s;
len=strlen(s);
for(int i=len;i>=;i--){
s[i]='\0';
W[s]++;
}
}cin>>m;
for(int i=;i<=m;i++){
cin>>s;
if(W[s]!=){
cout<<"YES\n";
}else cout<<"NO\n";
}return ;
}

  

Trie树初探,参考博客:TRTTG

#1014 : Trie树

建树+查找

#include<iostream>
#include<cstdio>
#include<cstring>
#define N 10101010 using namespace std; int n,m,tot,tri[N][],vi[N];
string s; void insert(){
int l=s.length(),root=;
for(int i=;i<l;i++){
int id=s[i]-'a';
if(!tri[root][id]) tri[root][id]=++tot;
root=tri[root][id];
vi[root]++;
}
} int ask_(){
int l=s.length(),root=;
for(int i=;i<l;i++){
int id=s[i]-'a';
if(!tri[root][id]) return ;
root=tri[root][id];
}
return vi[root];
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) {
cin>>s;
insert();
}
scanf("%d",&m);
for(int i=;i<=m;i++){
cin>>s;
printf("%d\n",ask_());
}
return ;
}
 

codevs——4189 字典&&HihoCoder #1014 : Trie树的更多相关文章

  1. Hihocoder #1014 : Trie树 (字典数树统计前缀的出现次数 *【模板】 基于指针结构体实现 )

    #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助, ...

  2. hihoCoder #1014 : Trie树 [ Trie ]

    传送门 #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互 ...

  3. hihoCoder 1014 Trie树 (Trie)

    #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho是一对好朋友.出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮 ...

  4. hihoCoder 1014 : Trie树(字典树)

    传送门 Description 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小 ...

  5. hihoCoder#1014 Trie树 (前缀树)

    题目大意:给一本有n个单词的词典,有m次询问,每次询问的是该词典中有多少个单词有共同的某个前缀. 题目分析:在添加单词建立trie的时候,每经过一个节点就意味着该节点和它的各级祖先节点是某个单词的前缀 ...

  6. hihocoder 1014: Trie树(Trie树模板题)

    题目链接 #include<bits/stdc++.h> using namespace std; ; struct T { int num; T* next[]; T() { num=; ...

  7. hiho #1014 : Trie树

    #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助, ...

  8. Codevs 4189 字典(字典树Trie)

    4189 字典 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 传送门 题目描述 Description 最经,skyzhong得到了一本好厉害的字典,这个字典里 ...

  9. #1014 : Trie树 HihoCoder(字典树)

    描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题: ...

随机推荐

  1. hdu5305(2015多校2)--Friends(状压,深搜)

    Friends Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Su ...

  2. 箭头函数的 this

    在非严格模式下,匿名函数和定时器中的 this 由于没有默认的宿主对象,因此指向 window: 而在严格模式下,匿名函数和定时器中的 this 由于没有默认的宿主对象,因此为 undefined. ...

  3. js 得到 radiobuttonlist和CheckBoxList 选中值

    js 得到 radiobuttonlist和CheckBoxList 选中值 得到radiobuttonlist 选中值:var CheckBoxList=document.all.optButton ...

  4. 【Codeforces】 Round #374 (Div. 2)

    Position:http://codeforces.com/contest/721 我的情况 开始还是rank1,秒出C.(11:00机房都走光了,我ma到11:05才走,只打了一个小时) 结果.. ...

  5. [Codeplus 2017] 晨跑

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5105 [算法] 答案为三个数的最小公倍数 [代码] #include<bits ...

  6. IJ-java-com-util-common:

    ylbtech-IJ-java-com-util-common: 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出 ...

  7. 为什么要使用XHTML?

    XHTML 是什么? XHTML 指可扩展超文本标签语言(EXtensible HyperText Markup Language). XHTML 的目标是取代 HTML. XHTML 与 HTML ...

  8. c3p0-config.xml文件简单说明与备忘

    <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <named-confi ...

  9. [Apple开发者帐户帮助]九、参考(6)支持的功能(watchOS)

    watchOS扩展可用的功能取决于您的程序成员身份. 注意:对于watchOS应用程序目标,可用的功能是应用程序组和后台模式,并且不依赖于您的程序成员身份. 能力 ADP 企业 Apple开发者 应用 ...

  10. redis+php实现秒杀

    使用redis队列,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行,推荐使用(mysql事务在高并发下性能下降很厉害,文件锁的方式也是) 先将商品库存如队列 1 2 3 4 5 6 7 ...