HDU 2846 Repository(字典树,标记)
字典树,注意初始化的位置~!!位置放错,永远也到不了终点了org。。。。
我是用数组模拟的字典树,这就要注意内存开多少了,,要开的不大不小刚刚好真的不容易啊。。。。
我用了val来标记是否是同一个串分解而来的,保存的是串的编号
num记录数目。
//string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last);
//把[first0,last0)之间的部分替换成[first,last)之间的字符串 #include<iostream>
#include<cstdio>
#include<list>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
#include<memory.h>
#include<set>
using namespace std;
#define ll __int64
int pos;
struct tt
{
int val,arr[],num;
tt(){
val=-,num=;
memset(arr,-,sizeof(arr));
}
}a[]; //用数组模拟的字典树开的内存大小也是一个技术活,太大超内存,太小runtime errer。。 void insert(char *s,int val,int id,int d)
{
if(s[d]=='\0')return; int t=s[d]-'a';
if(a[id].arr[t]==-)
a[id].arr[t]=++pos;
id=a[id].arr[t];
if(a[id].val!=val)
{
a[id].val=val;
a[id].num++;
}
insert(s,val,id,d+);
}
int solve(char *s,int id)
{
int ans=;
int len=strlen(s);
for(int i=;i<len;i++)
{
int t=s[i]-'a';
if(a[id].arr[t]==-)
return ;
else
id=a[id].arr[t];
}
return a[id].num;
} int main()
{
int t;
pos=;//注意初始化的位置
scanf("%d",&t);
while(t--)
{
char s[];
scanf("%s",s);
int len=strlen(s);
for(int i=;i<len;i++)
{
insert(s+i,t,,);
}
}
int n;
scanf("%d",&n);
while(n--)
{
char s[];
scanf("%s",s);
int ans=solve(s,);
printf("%d\n",ans);
}
return ;
}
HDU 2846 Repository(字典树,标记)的更多相关文章
- HDU 2846 Repository (字典树 后缀建树)
Repository Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- hdu 2846 Repository (字典树)
RepositoryTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- hdu 2846(字典树)
Repository Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 2846 Repository(字典树,每个子串建树,*s的使用)
Repository Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 2846 Repository(字典树)
字典树较为复杂的应用,我们在建立字典树的过程中需要把所有的前缀都加进去,还需要加一个id,判断它原先是属于哪个串的.有人说是AC自动机的简化,但是AC自动机我还没有做过. #include<io ...
- hdu 2846 Repository
http://acm.hdu.edu.cn/showproblem.php?pid=2846 Repository Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 1979 DFS + 字典树剪枝
http://acm.hdu.edu.cn/showproblem.php?pid=1979 Fill the blanks Time Limit: 3000/1000 MS (Java/Others ...
- HDU 1671 (字典树统计是否有前缀)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1671 Problem Description Given a list of phone number ...
- hdu2846 Repository 字典树(好题)
把每个字符串的所有子串都加入字典树,但在加入时应该注意同一个字符串的相同子串只加一次,因此可以给字典树的每个节点做个记号flag--表示最后这个前缀是属于那个字符串,如果当前加入的串与它相同,且二者属 ...
随机推荐
- "大账户"时代
当要下载某文件时,哪怕是免积分,也需要登陆账户才能下载. 当要浏览某论坛时,只有注册账户,才可以浏览帖子. 当要网购商品时,必须注册账户,还要有众多宝宝平台,才可以实现交易. 当要团购时,必须先 ...
- linux内核设计与实现学习笔记-模块
模块 1.概念: 如果让LINUX Kernel单独运行在一个保护区域,那么LINUX Kernel就成为了“单内核”. LINUX Kernel是组件模式的,所谓组件模式是指:LINUX K ...
- AppCan移动平台开发常见问题解答
在使用AppCan移动平台开发跨平台APP时,有开发者会遇到一些问题, 不急,跟笔者一起来聊一聊使用AppCan平台开发中常见问题的解答方法. 问1.正常是按照官网提供的4个iphone启动图尺寸来做 ...
- ubuntu14.04字符界面中文乱码及中文输入
作为ubuntu用户字符界面是绝对不陌生的,尤其是维护管理服务器的朋友为了节省资源都是用的字符界面,但是默认字符界面中文目录文件都是乱码,根本无法打开编辑,那么怎么让字符界面显示中文目录文件,还有在字 ...
- 【EF Code First】 一对一、一对多的多重关系配置
这里使用相册Album和图片Picture的关系做示例 1,Album与Picture最基本的关系是1-n(一个相册可以有多张图片) 这时Album.Picture实体类可以这么定义 /// < ...
- 55.ERROR:Place:1136 - This design contains a global buffer instance…… non-clock load pins off chip
ISE在布局布线时,出现下图所示错误. 对于"clock_dedicated_route”错误原因有两种情况: 1. 就是有一个时钟你没有放到全局时钟或者局部时钟的引脚,布局的时候不能把它 ...
- 一个关于C#中基类与接口混合继承的疑问总结
思路参照 http://www.cnblogs.com/allenlooplee/archive/2004/11/16/64553.html,对原文进行了简化和补充,感谢原作者. 问题很简单,如下所示 ...
- [磁盘管理与分区]——MBR破坏与修复
GURB的破坏和恢复(利用备份体恢复) (1)备份 # count= //对MBR中的引导程序部分作备份 (2)破坏MBR中的前446字节 # count= (3)恢复MBR中前446字节 ===&g ...
- c判断括弧是否匹配
这里我没有用堆栈.直接用一个数组input[SIZE]接收用户的输入,在遍历数组,对数组进行操作.已经匹配好的括弧直接用#号覆盖,最后遍历数组.如果数组只有#号,没有其他元素,则匹配.否则不匹配. / ...
- HTML统一资源定位器
w3c 更好的解释 在OSGi in action中安装bundle时要加文本传输协议,要不然shell判断不出来