codevs——4189 字典&&HihoCoder #1014 : Trie树
最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n个单词(1<=n<=200000)
现在skyzhong需要在字典里查询以某一段字母开头的单词
如:skyzhong想查询a
那么只要是a开头的单词就可以了
skyzhong只想知道里面有没有这一个单词(因为没有他就不查了)
若有,请输出YES。若没有,请输出NO
第一行一个数n
第二行到第n+1行,一行一个字符串
再下一行一个数m,表示skyzhong想要查询的次数
接着m行,一行一个字符串,表示skyzhong想要查的东西
共m行,若有这字串输出YES,否则输出NO
3
asd
asfdghj
asfd
3
asd
asdghj
asf
YES
NO
YES
字符串只有小写字母,且长度≤8
#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树的更多相关文章
- Hihocoder #1014 : Trie树 (字典数树统计前缀的出现次数 *【模板】 基于指针结构体实现 )
#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助, ...
- hihoCoder #1014 : Trie树 [ Trie ]
传送门 #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互 ...
- hihoCoder 1014 Trie树 (Trie)
#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho是一对好朋友.出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮 ...
- hihoCoder 1014 : Trie树(字典树)
传送门 Description 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小 ...
- hihoCoder#1014 Trie树 (前缀树)
题目大意:给一本有n个单词的词典,有m次询问,每次询问的是该词典中有多少个单词有共同的某个前缀. 题目分析:在添加单词建立trie的时候,每经过一个节点就意味着该节点和它的各级祖先节点是某个单词的前缀 ...
- hihocoder 1014: Trie树(Trie树模板题)
题目链接 #include<bits/stdc++.h> using namespace std; ; struct T { int num; T* next[]; T() { num=; ...
- hiho #1014 : Trie树
#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助, ...
- Codevs 4189 字典(字典树Trie)
4189 字典 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 传送门 题目描述 Description 最经,skyzhong得到了一本好厉害的字典,这个字典里 ...
- #1014 : Trie树 HihoCoder(字典树)
描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题: ...
随机推荐
- mac 下安装caffe(一)
1.brew install --build-from-source -vd boost boost-python 这一步出错:libtool: unrecognized option `-stati ...
- expect安装测试-批量用户管理
安装: yum list | grep expect yum install expect 批量创建用户: ansible mysqldb -m user -a 'name=ansible state ...
- elasticsearch 布尔过滤器 游标查询 Scroll
组合过滤器 | Elasticsearch: 权威指南 | Elastic https://www.elastic.co/guide/cn/elasticsearch/guide/current/co ...
- return在Java中的两个作用
Java中return的两个作用: (1)返回方法指定类型的值(这个值总是确定的),也可以是对象 (2)方法的结束
- eclipse高亮选中属性以及更改颜色
1.显示: 1.1.工具栏里有个黄色小笔的图标,点一下就好了 1.2.打开对话框windows->preference,在左上角输入mark Occurrencs 把右边都选 ...
- 【HNOI 2003】 激光炸弹
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1218 [算法] 二维前缀和 [代码] #include<bits/stdc++ ...
- [luogu4735]最大异或和
https://zybuluo.com/ysner/note/1238161 题面 给定一个初始长度为\(N\)的非负整数序列\(\{a\}\). 有\(m\)个操作,操作分为两种: 在序列末尾加一个 ...
- leetcode快排相关
leetcode:75颜色分类(3way).215数组中的第K个最大元素(normal) 3way private static void quick3waySort(int[] arr, int l ...
- Oracle查询列重命名
select count(*) 呼入量 from crm_cisco_call_detail
- P2924 [USACO08DEC]大栅栏Largest Fence
传送门 反正我是看不出来这题和凸包有什么关系--大佬们是怎么想到的-- 不准确一点的说,本题就是要我们求一个边上点数最多的凸包 我们可以先把所有的边都取出来,然后按极角排序.枚举这个凸包的起点,然后做 ...