Problem Jong Hyok and String

题目大意

  给你n个字符串,有q个询问。

  定义set(s)={(i,j)} 表示 s在第i个字符串中出现,且末尾位置为j。

  对于一个询问,求set(Qi)=set(t) ,t的数量。

  (n,q<=10^5 , 字符串总长<=10^5)

解题分析

  直接将n个串塞进一个后缀自动机里面。

  对于一个询问串qi,找到其在后缀自动机中出现的位置j。

  则答案为len[j] - len[fail[j]] 。 (具体为什么还需要好好斟酌一下)

参考程序

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; #define V 100008
int ans[V];
struct sam{
int nt[V*][],f[V*],a[V*],rig[V*];
int last,sum,len;
int p,q,np,nq; void clear(){
memset(f,-,sizeof(f));
memset(a,,sizeof(a));
memset(nt,-,sizeof(nt));
last = sum = len=;
}
void insert(int ch){
len++;
if (~nt[last][ch] && a[nt[last][ch]]==len){
last=nt[last][ch]; return;
}
p=last; last=np=++sum; a[np]=a[p]+; rig[np]=;
for (;~p && !~nt[p][ch];p=f[p]) nt[p][ch]=np;
if (p==-) f[np]=;
else
{
q=nt[p][ch];
if (a[q]==a[p]+) f[np]=q;
else
{
nq=++sum; a[nq]=a[p]+;
memcpy(nt[nq],nt[q],sizeof(nt[q]));
f[nq]=f[q];
f[q]=f[np]=nq;
for (;~p && nt[p][ch]==q;p=f[p]) nt[p][ch]=nq;
}
}
}
int work(char *s,int l){
int now=;
for (int i=;i<=l;i++){
if (nt[now][s[i]-'a']==-) return ;
now=nt[now][s[i]-'a'];
}
return a[now]-a[f[now]];
}
}sam; char str[V];
void work(){
sam.clear();
int n,m;
scanf("%d %d",&n,&m);
for (int i=;i<=n;i++){
sam.len=sam.last=;
scanf("%s",str+);
int len=strlen(str+);
for (int j=;j<=len;j++) sam.insert(str[j]-'a');
}
for (int i=;i<=m;i++){
scanf("%s",str+);
int len=strlen(str+);
printf("%d\n",sam.work(str,len));
}
} int main(){
int T;
scanf("%d",&T);
for (int t=;t<=T;t++){
printf("Case #%d:\n",t );
work();
}
return ;
}

hdu5853 (后缀自动机)的更多相关文章

  1. BZOJ 后缀自动机四·重复旋律7

    后缀自动机四·重复旋律7 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成的数列. 神奇的 ...

  2. 【Codeforces235C】Cyclical Quest 后缀自动机

    C. Cyclical Quest time limit per test:3 seconds memory limit per test:512 megabytes input:standard i ...

  3. 【hihocoder#1413】Rikka with String 后缀自动机 + 差分

    搞了一上午+接近一下午这个题,然后被屠了个稀烂,默默仰慕一晚上学会SAM的以及半天4道SAM的hxy大爷. 题目链接:http://hihocoder.com/problemset/problem/1 ...

  4. 【BZOJ-3998】弦论 后缀自动机

    3998: [TJOI2015]弦论 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2018  Solved: 662[Submit][Status] ...

  5. HDU 4622 Reincarnation (查询一段字符串的不同子串个数,后缀自动机)

    Reincarnation Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)To ...

  6. hihoCoder 后缀自动机三·重复旋律6

    后缀自动机三·重复旋律6 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数列. 现在小Hi ...

  7. hihoCoder #1445 : 后缀自动机二·重复旋律5

    #1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...

  8. 数据结构:后缀自动机 WJMZBMR讲稿的整理和注释

    链接放在这里,有点难理解,至少我个人是的. 后缀自动机是一种有限状态自动机,其功能是识别字符串是否是母串的后缀.它能解决的问题当然不仅仅是判断是不是后缀这种事,跟字符串的连续子串有关的问题都可以往这个 ...

  9. 【SPOJ】7258. Lexicographical Substring Search(后缀自动机)

    http://www.spoj.com/problems/SUBLEX/ 后缀自动机系列完成QAQ...撒花..明天or今晚写个小结? 首先得知道:后缀自动机中,root出发到任意一个状态的路径对应一 ...

随机推荐

  1. 服务订单SO创建

    FUNCTION Z_SD_SALESORDER_CREATE. *"------------------------------------------------------------ ...

  2. 【转载】如何在德州仪器网站查找和下载PCB封装

    德州仪器的网站做得相当不错,查找IC资料和下载IC封装样样给力.那么如何在TI网站上能够快速查找到自已需要的PCB封装呢?下面我来告诉你. 1.       在浏览器中输入网址http://weben ...

  3. jQuery制作瀑布流(转)

    “瀑布流布局”随着pinterest网的流行而出名,现在国内使用这种风格布局的网站也越来越多,比如说Mark之,蘑菇街,点点网,哇哦等等.我第一次听到这个布局名称是来自于“乔花写的<瀑布流布局浅 ...

  4. group_concat函数与find_in_set()函数相结合

    一:group_concat函数详解 1.语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'] ...

  5. 377. Combination Sum IV——DP本质:针对结果的迭代,dp[ans] <= dp[ans-i] & dp[i] 找三者关系 思考问题的维度+1,除了数据集迭代还有考虑结果

    Given an integer array with all positive numbers and no duplicates, find the number of possible comb ...

  6. BZOJ1579 [Usaco2009 Feb]Revamping Trails 道路升级

    各种神作不解释QAQQQ 先是写了个作死的spfa本机过了交上去T了... 然后不想写Dijkstra各种自暴自弃... 最后改了一下步骤加了个SLF过了... 首先一个trivial的想法是$dis ...

  7. 【模板下载】innosetup 制作.net安装包的模板

    NetworkComms网络通信框架序言 这个模板是在博客园和CodeProject上的代码修改而成的,感谢原作者 模板是2个 innosetup 制作.net 2.0 安装包的模板 innosetu ...

  8. TaskTracker节点上的内存管理器

    Hadoop平台的最大优势就是充分地利用了廉价的PC机,这也就使得集群中的工作节点存在一个重要的问题——节点所在的PC机内存资源有限(这里所说的工作节点指的是TaskTracker节点),执行任务时常 ...

  9. 管理工具MongoVUE使用

    连接数据库 管理数据库 查询 1,查询所有 2,查询命令窗口

  10. WordPress的神器

    导读 Markdown 是一种简单的标记语言,旨在帮助你花费更小的代价来格式化纯文本文档.在 WordPress 下你可以使用 HTML 或者可视化编辑器来格式化你的文档,但是使用 markdown ...