题目描述 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. 分布式数据库中间件DDM的实现原理

    随着数据量不断增大,传统的架构模式难以解决业务量不断增长所带来的问题,特别是在业务成线性.甚至指数级上升的情况.此时我们不得不通过水平扩展,把数据库放到不同服务器上来解决问题,也就是我们说的数据库中间 ...

  2. java有用的启动参数

    三大类选项: 1. 标准选项: 功能是很稳定的,所有的标准选项都是以-开头,比如-version, -server等. 2. X选项:以-X开头,这类选项的功能还是很稳定,但官方的说法是它们的行为可能 ...

  3. C# LIstbox 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题

    解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题 分类: winform2008-05-24 02:33 2592人阅读 评论(11) 收藏 举报 winf ...

  4. hadoop hbase 快速启动 关闭 配置:

    vim ~/.bashrcexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64   //JDK安装路径export HADOOP_HOME=/usr/l ...

  5. linux下打开windows txt文件中文乱码问题 (转载)

    转自:http://blog.csdn.net/imyang2007/article/details/7448177 在linux操作系统下,我们有时打开在windows下的txt文件,发现在wind ...

  6. [jzoj NOIP2018模拟10.23]

    丢分主要是下面几个方面: 1.T2代码交错了,有个特判没写丢了10分 2.T1线段树加等差数列写错了(其实二维差分就可以,但我当时不会) 3.T3思考再三还是为了10分写上了主席树,还是写错了 总体评 ...

  7. JS判断数组是否包含某元素

    我在学习ES6数组拓展时,发现了新增了不少了有趣的数组方法,突然想好工作中判断数组是否包含某个元素是非常常见的操作,那么这篇文章顺便做个整理. 1.for循环结合break 可能很多人第一会想到for ...

  8. RHEL6.5安装QT5.4,设置环境变量

    qt5.4.run在[/home/share]目录下 vim ~/.bashrcexport PATH=/opt/oracle/Qt5.4.1/Tools/QtCreator/bin:/opt/ora ...

  9. 吝啬的国度 ---用vector 来构图

    根据题目可以看出来  有n 个城市 只有 n-1  条路线 那么  就可以确定这个图中  不存在 圆  所以从一个点到另一个点 只有一条唯一的路  所以从一个节点到另一个节点 那么 这个节点只有一个唯 ...

  10. NS2学习笔记(二)

    Tcl语言 变量和变量赋值 set a "Hello World!" #将字符串赋值给变量a puts "NS2 say $a" #输出字符串的内容,其中$a表 ...