HDU 2846(Tire的变形)
来源:互联网 发布:java帮助文档手机版 编辑:程序博客网 时间:2024/06/03 19:45
http://acm.hdu.edu.cn/showproblem.php?pid=2846
题意:给你p个字符串,q次询问,问p个字符串中含有q的字符串的个数。
思路:看了别人的题解,讲p个字符串的后缀也存入字典树,但是这样会有abab这种字符串出现重复计数的情况,用vis作为标记,鶸表达能力有限,详细看代码。
#include <iostream>#include <stdio.h>#include <string.h>#define maxn 500010using namespace std;int cnt=1;struct Tire{ int pointer[26]; int value; int vis; Tire() { memset(pointer,0,sizeof(pointer)); value=0; vis=0; }}pile[maxn];void Build(char *s,int ID)///建树{ int var=0,len=strlen(s); for(int i=0;i<len;i++) { int id=s[i]-'a'; if(pile[var].pointer[id]==0) { var=pile[var].pointer[id]=cnt++; pile[var].value++; pile[var].vis=ID; } else { var=pile[var].pointer[id]; if(pile[var].vis!=ID)///vis不等于当前的ID,说明不是字串。 { pile[var].value++; pile[var].vis=ID; } } }}int Search(char *s)///搜索{ int var=0; int len=strlen(s); for(int i=0;i<len;i++) { if(pile[var].pointer[s[i]-'a']==0) { return 0; } var=pile[var].pointer[s[i]-'a']; } return pile[var].value;}int main(){ int p; cin>>p; char s[55]; while(p--) { scanf("%s",s); for(int i=0;i<strlen(s);i++) Build(s+i,p);///将该字符的编号做为标记 } int q; cin>>q; while(q--) { scanf("%s",s); cout<<Search(s)<<endl; }}
阅读全文
0 0
- HDU 2846(Tire的变形)
- hdu 1075 tire树
- HDU-1075 tire
- hdu 5492(矩阵模型的变形)
- 最短路的变形(hdu 4725)
- HDU 2846 Repository(字典树变形)
- hdu 1247 字典树 tire树 (简单)
- HDU 2072 单词数(Tire 和 set 两解)
- HDU 4278 变形的八进制
- hdu 4859 最大点权独立集的变形(方格取数的变形)
- HDU 2846 字典树变形
- hdu 2846 Repository 字典树的一种变形
- Tire
- hdu 3466(背包变形)
- hdu变形课(dfs)
- hdu 变形课(DFS)
- 变形kmp(hdu 5918)
- hdu 5918 (kmp变形)
- 数据挖掘 日期转换表
- 1083: 数值统计(多实例测试)
- 车牌识别相机的算法开发与调用例程
- 第二周——项目二—程序的多文件组织
- pg_dump不能导出访问权限 pg_dumpall可以导出访问权限
- HDU 2846(Tire的变形)
- Nginx负载均衡配置简易实现
- 练习7-2重循环
- pg备份相关知识点
- 快速排序
- 自定义JavaScript轮播组件
- php仅连接到mysql服务器的代码实现
- 算法提高 ADV-170 数字黑洞
- OpenNi2+PCL显示彩色点云