Trie树的小应用——Chemist
2024-09-07 22:32:51
题意(自己编的):
给你一篇文章,包含n个长度为Si的单词,然后给你m组询问,每次询问一个单词在这篇文章中作为单词前缀出现的次数。n <=10^6,m<=10^6,Si<=100。
还是用字典树,在插入的时候记录每一个节点被访问的次数,在查找的时候用指针p找到当前单词,这个单词的最后一个字母到的节点所存的次数就是它作为前缀出现的次数。
代码:
#include<bits/stdc++.h>
using namespace std;
const int M=1e6+;
char word[];
int n,m,trie[M][],sum=,tim[M];
void insert(char a[])
{
int len=strlen(a),p=;
for(int i=;i<len;i++)
{
int ch=a[i]-'a';
if(trie[p][ch]==)trie[p][ch]=++sum;
p=trie[p][ch];
//if(i!=len-1)//如果是严格前缀的话
tim[p]++;//tim数组记录每个节点被访问过的次数
}
}
int find(char a[])
{
int len=strlen(a),p=;
for(int i=;i<len;i++)
{
int ch=a[i]-'a';
p=trie[p][ch];
if(p==)return ;
}
return tim[p];
}
int main()
{
cin>>n>>m;
for(int i=;i<=n;i++)
{
cin>>word;
insert(word);
}
for(int i=;i<=m;i++)
{
cin>>word;
printf("%d\n",find(word));
}
return ;
}
最新文章
- 《Entity Framework 6 Recipes》中文翻译系列 (31) ------ 第六章 继承与建模高级应用之自引用关联
- 如何让Log4net日志文件按每月归成一个文件夹,StaticLogFileName参数的用法
- C++ 类知识点
- 自定义UICollectinviewFlowLayout,即实现瀑布流
- VMnet1和V8
- lucene教程简介
- LeetCode之Balanced Binary Tree 平衡二叉树
- 关于Android Studio升级到2.0后和Gradle插件不兼容的问题
- UVa673 Parentheses Balance
- PHP: 深入pack/unpack 字节序
- error userinfo error pos 5 友盟分享 网页分享(无新浪微博客户端)
- CSS3+HTML5特效9 - 简单的时钟
- ASP.NET Web API框架揭秘:路由系统的几个核心类型
- Django学习(3)模板定制
- JavaSE基础篇—流程控制语句
- Beta冲刺 第二天
- mysql读写分离总结
- 通过groovy表达式拓展oval——实现根据同一实体中的其他属性值对某个字段进行校验
- Redis 个人理解总结
- helm 更改为国内源