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. 转:Vmware Exsi使用简要说明

    界面介绍 Exsi的管理工具可以用vSphere Client来管理虚拟机.管理虚拟的网络交换机.管理物理机的内存.物理机的硬盘.物理机的CPU等资源.界面的大致介绍如下图. 资源分配 创建内存.CP ...

  2. 生成json对象

    JSONObject 对于放入的object,最终生成的json是什么样的? 两个JavaBean: public class ClassBean { private int grade; priva ...

  3. html5 <input> placeholder 属性

    带有 placeholder 文本的搜索字段: <form action="demo_form.asp" method="get"> <inp ...

  4. BZOJ4007 [JLOI2015]战争调度

    根本想不出来... 原来还是暴力出奇迹啊QAQ 无限ymymym中 /************************************************************** Pr ...

  5. oracle 里面定时执行任务,比如存储过程内容等

    DECLARE   job_no_ NUMBER;   BEGIN      DBMS_JOB.SUBMIT(job_no_,                   'proc_qszx_dw_sc(' ...

  6. 解析Json的谷歌官方方法Gson和阿里巴巴的fastJson方法。

    //测试单个json文本 public void testGsonTwo(){ String jsonStr = "{\"id\":100,\"name\&qu ...

  7. PowerMock遇到的问题——3

    在用WhiteBox调用对象的私有方法时,如果要传的参数为空,如果直接在参数列表中写null的话,可能会报空指针异常,可以定义一个变量使他等于空,再把变量传进去就可以了.

  8. 一模 (4) day2

    第一题: 题目大意:二进制数 n mod m 的结果是多少?  n 的长度(二进制数的位数)<=200 000:  m 的长度(二进制数的位数)<=20. 解题过程: 1.我的算法是直接高 ...

  9. jQuery初步

    1.jQuery开发步骤 jQuery是第三方开源组织基于js写的一款跨主流浏览器的实用库. (1)引用第三方js库文件,<script type="text/javascript&q ...

  10. 跨域SSO的实现

    翻译自CodeProject网站ASP.NET9月份最佳文章:Single Sign On (SSO) for cross-domain ASP.NET applications. 翻译不妥之处还望大 ...