(模板)hdoj1251(字典树模板题)
2024-08-26 20:28:49
题目链接:https://vjudge.net/problem/HDU-1251
题意:给定一系列字符串之后,再给定一系列前缀,对每个前缀查询以该字符串为前缀的字符串个数。
思路:
今天开始学字典树,从入门题开始。用数组实现,count数组表示每个结点出现次数,trie[0]为根节点。插入和查询一个字符串的复杂度为O(len)。len为字符串的长度。
AC code:
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; const int maxn=1e6+; //树的大小,尽量开大点
int trie[maxn][],num[maxn],cnt;
char str[]; void insert(char *s){
int len=strlen(s);
int u=;
for(int i=;i<len;++i){
int t=s[i]-'a';
if(!trie[u][t]){
++cnt;
memset(trie[cnt],,sizeof(trie[cnt]));
trie[u][t]=cnt;
}
u=trie[u][t];
++num[u];
}
} int query(char *s){
int len=strlen(s);
int u=;
for(int i=;i<len;++i){
int t=s[i]-'a';
if(!trie[u][t]) return ;
u=trie[u][t];
}
return num[u];
} int main(){
cnt=;
memset(trie[],,sizeof(trie[]));
memset(num,,sizeof(num));
while(gets(str),str[]!='\0')
insert(str);
while(~scanf("%s",str))
printf("%d\n",query(str));
return ;
}
最新文章
- iOS开发系列--C语言之构造类型
- JVM原理讲解和调优
- web基础知识小记
- python基础——错误处理
- new 运算符
- Android_2015-04-07 Android中Intent的使用
- 11-17的学习总结(DOMfirstday)
- [Locked] Wiggle Sort
- CoreCRM 开发实录 —— 单元测试之 Mock UserManager 和 SignInManager
- Node.js:常用工具util
- 【分享】bootstrap学习笔记
- L9,a cold welcome
- git remote log error
- CTF杂项之BubbleBabble加密算法
- Java NIO系列教程(八)JDK AIO编程
- restful规范整理
- Office常用技巧
- tcp_timestamps和tcp_tw_recycle
- spring boot ---->; spring boot 和spring的联系
- linux命令学习之:vim
热门文章
- Day11:Flex布局
- warning insecure world writable dir ruby mode 040777,gem insstal sass error failed to build gem native extension
- python 链表的实现
- Intellij IDEA 从入门到上瘾 图文教程
- fluent-动网格-动态层
- 阿里物联网平台(一)Windows系统+VS2017 模拟设备端接入
- Tosca 给定义变量,取内容放到变量里
- 001 安装mysql
- springboot启动提示连接mysql报错:java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required
- 在excel图表上添加数据标签