题目描述 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. Linuxserver沦陷为肉鸡的全过程实录

    Linuxserver沦陷为肉鸡的全过程实录 Linuxserver沦陷为肉鸡的全过程实录 从防火墙瘫痪说起 查找黑客行踪的方法 沦陷过程分析 1 oracle用户password被破解 2 黑客动作 ...

  2. EF TMD

    TMD 几个月前,本着学习的心态,首次在项目中应用EF.因为这里老是赶.赶.赶,当时只是匆匆而就,浅尝辄止,搞到现在对EF一知半解,每次在新项目使用,都担惊受怕,大费周折,不知道什么时候,在什么地方就 ...

  3. CMDBuild安装及webservice接口的获取

    近期项目组之前一直使用的OneCMDB出现了问题,在增删改数据时异常的慢.于是考虑能否够优化OneCMDB.由于本人水平有限,对OneCMDB进行代码级别的优化临时还有点难度.于是就对现有的其它开源C ...

  4. Mysql的简单使用(一)

    如果你会查询这些相关的问题,说明你是一个正在或者准备从事IT的程序猿,对于一个程序猿而言,不会使用linux系统的程序猿不是一好的程序猿哦!因为windows有时候真的让人很抓狂,而本人也相信没有什么 ...

  5. 【BZOJ 2160】 拉拉队排练

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2160 [算法] 先简化题意 : 给定一个字符串,求最长的k个奇回文子串长度的乘积 先 ...

  6. 【HDU 4864】 Task

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4864 [算法] 贪心 不妨将两个数组分别按x从大到小排序 然后枚举每件物品,选择x值大于该物品的且 ...

  7. 洛谷P1193 洛谷团队训练VS传统团队训练

    题目背景 "在中学的信息学教育领域,洛谷无疑是一个相当受欢迎的辅助网站.同时有百余所学校正在通过洛谷进行信息学竞赛(以后简称OI)的教育.洛谷之所以如此受欢迎,是因为洛谷创新的将OI教育的几 ...

  8. 洛谷[USACO06JAN]把牛Corral the Cows

    题目描述 约翰打算建一个围栏来圈养他的奶牛.作为最挑剔的兽类,奶牛们要求这个围栏必须是正方 形的,而且围栏里至少要有C< 500)个草场,来供应她们的午餐. 约翰的土地上共有C<=N< ...

  9. Spark 机器学习 ---CountVectorizer

    文本特征提取->> CountVectorizer:基于词频数的文档向量 package Spark_MLlib import org.apache.spark.ml.feature.Co ...

  10. 一、Linux文件权限与目录配置

    行文结构如下: 用户和用户组 Linux文件权限概念 Linux目录配置 重点回顾 1.用户与用户组 Linux是个多用户.多任务的系统,可能有多人同时使用这台机器进行工作,为了考虑每个人的隐私和工作 ...