Description

Little jay really hates to deal with string. But moondy likes it very much, and she's so mischievous that she often gives jay some dull problems related to string. And one day, moondy gave jay another problem, poor jay finally broke out and cried, " Who can help me? I'll bg him! "

So what is the problem this time?

First, moondy gave jay a very long string A. Then she gave him a sequence of very short substrings, and asked him to find how many times each substring appeared in string A. What's more, she would denote whether or not founded appearances of this substring are allowed to overlap.

At first, jay just read string A from begin to end to search all appearances of each given substring. But he soon felt exhausted and couldn't go on any more, so he gave up and broke out this time.

I know you're a good guy and will help with jay even without bg, won't you?

Input

Input consists of multiple cases( <= 20 ) and terminates with end of file.

For each case, the first line contains string A ( length <= 10^5 ). The second line contains an integer N ( N <= 10^5 ), which denotes the number of queries. The next N lines, each with an integer type and a string a ( length <= 6 ), type = 0 denotes substring a is allowed to overlap and type = 1 denotes not. Note that all input characters are lowercase.

There is a blank line between two consecutive cases.

Output

For each case, output the case number first ( based on 1 , see Samples ).

Then for each query, output an integer in a single line denoting the maximum times you can find the substring under certain rules.

Output an empty line after each case.

Sample Input

ab
2
0 ab
1 ab abababac
2
0 aba
1 aba abcdefghijklmnopqrstuvwxyz
3
0 abc
1 def
1 jmn

Sample Output

Case 1
1
1 Case 2
3
2 Case 3
1
1
0

0的话就正常累计,1的话累计的时候加个判断:上次累计的位置与这次的距离是否达到该串长度。

#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int MAX=,Tr=,LO=,NU=1e6+;
struct tree{
int w,f,id;
int t[MAX];
};
int tt,n,an[NU],iu[NU],xx[NU];
char c[LO],s[LO];
bool m[NU];
queue <int> q;
inline int f(char c){return c-'a';}
struct AC{
tree t[Tr];
int num;
int o[Tr];
inline void FI(){
register int i,j;
for (i=;i<=num;i++)
for (j=;j<MAX;j++)
t[i].t[j]=;
for (i=;i<=num;i++) t[i].w=t[i].f=t[i].id=o[i]=;
num=;
}
inline void in(int nu){
int p=,l,mm=strlen(c);iu[nu]=mm;
for (register int i=;i<mm;i++){
l=f(c[i]);
if (!t[p].t[l]) t[p].t[l]=++num;
p=t[p].t[l];
}
if (t[p].id) xx[nu]=t[p].id;else
t[p].id=nu;
}
inline void mafa(){
register int i;int k,p;
q.push();t[].f=;
while(!q.empty()){
k=q.front();q.pop();
for (i=;i<MAX;i++)
if (t[k].t[i]){
p=t[k].f;
while((!t[p].t[i])&&p) p=t[p].f;
t[t[k].t[i]].f=(k==p)?:t[p].t[i];
q.push(t[k].t[i]);
}
}
}
inline void que1(){
register int i,j;
int p=,x,mm=strlen(s);
for (i=;i<mm;i++){
x=f(s[i]);
while(!t[p].t[x]&&p) p=t[p].f;
p=t[p].t[x];
for (j=p;j;j=t[j].f) t[j].w++;
}
for (i=;i<=num;i++)
if (t[i].id) an[t[i].id]=t[i].w;
}
inline void que2(){
register int i,j;
int p=,x,mm=strlen(s);
for (i=;i<mm;i++){
x=f(s[i]);
while(!t[p].t[x]&&p) p=t[p].f;
p=t[p].t[x];
for (j=p;j;j=t[j].f)
if (t[j].id&&o[j]+iu[t[j].id]<=i+) t[j].w++,o[j]=i+;
}
for (i=;i<=num;i++)
if (t[i].id) an[t[i].id]=t[i].w;
}
}T1,T2;
int main(){
//freopen("a.in","r",stdin);
//freopen("a.out","w",stdout);
register int i,j;tt=;
while(~scanf("%s",&s)){
tt++;
T1.FI();T2.FI();
scanf("%d",&n);
for (i=;i<=n;i++) xx[i]=i;
for (i=;i<=n;i++){
scanf("%d",&m[i]);scanf("%s",c);
if (!m[i]) T1.in(i);else T2.in(i);
}
T1.mafa();
T2.mafa();
T1.que1();
T2.que2();
printf("Case %d\n",tt);
for (i=;i<=n;i++) printf("%d\n",an[xx[i]]);
printf("\n");
}
}

zoj 3228:Searching the String的更多相关文章

  1. ZOJ 3228 Searching the String(AC自动机)

    Searching the String Time Limit: 7 Seconds      Memory Limit: 129872 KB Little jay really hates to d ...

  2. ZOJ 3228 Searching the String (AC自己主动机)

    题目链接:Searching the String 解析:给一个长串.给n个不同种类的短串.问分别在能重叠下或者不能重叠下短串在长串中出现的次数. 能重叠的已经是最简单的AC自己主动机模板题了. 不能 ...

  3. ZOJ - 3228 Searching the String (AC自己主动机)

    Description Little jay really hates to deal with string. But moondy likes it very much, and she's so ...

  4. AC自动机---Searching the String

    ZOJ   3228 题目网址:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16401 Description Little ...

  5. ZOJ3228 Searching the String —— AC自动机 + 可重叠/不可重叠

    题目链接:https://vjudge.net/problem/ZOJ-3228 Searching the String Time Limit: 7 Seconds      Memory Limi ...

  6. zoj3228 Searching the String AC自动机查询目标串中模式串出现次数(分可覆盖,不可覆盖两种情况)

    /** 题目:zoj3228 Searching the String 链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=34 ...

  7. ZOJ3228 Searching the String (AC自动机)

    Searching the String Time Limit: 7 Seconds                                      Memory Limit: 129872 ...

  8. Searching the String - ZOJ 3228(ac自动机)

    题目大意:首先给你一下母串,长度不超过10^5,然后有 N(10^5) 次查询,每次查询有两种命令,0或者1,然后加一个子串,询问母串里面有多少个子串,0表示可以重复,1表示不可以重复.   分析:发 ...

  9. 【ZOJ 3228】Searching the String 【AC自动机】

    题意 给出n个模式串和一个文本串,输出各个模式串在文本串中出现的次数.模式串有两种类型,0类型代表可以有重叠,1类型代表不能有重叠.模式串可能出现重复. 分析 算是AC自动机的模板题? 因为模式串可以 ...

随机推荐

  1. for循环语句以及输出语句

    action() { int  i;  //定义变量    lr_start_transaction("submit_answer");  //开始事物    for(i=0; i ...

  2. OC学习10——内存管理

    1.对于面向对象的语言,程序需要不断地创建对象.这些对象都是保存在堆内存中,而我们的指针变量中保存的是这些对象在堆内存中的地址,当该对象使用结束之后,指针变量指向其他对象或者指向nil时,这个对象将称 ...

  3. 来腾讯云开发者实验室 学习.NET

    腾讯云开发者实验室为开发者提供了一个零门槛的在线实验平台,开发者实验室提供的能力: 零门槛扫码即可免费领取实验机器,支持使用自有机器参与,实验完成后支持保留实验成果: 在线 WEB IDE 支持 sh ...

  4. arcgis api for js实现克里金插值渲染图--不依赖GP服务

    本篇的亮点是利用kriging.js结合arcgis api for js,实现克里金插值渲染图,截图如下: 具体实现的思路如下: 1.kriging.js开源js,可以实现针对容器canvas克里金 ...

  5. 向map中追加元素

    public class Demo01 { public static void main(String[] args) { String mapKey = "a"; Map< ...

  6. css各种布局

    1.水平居中 前提:父容器.parent 和子容器.child 1)使用text-align和inline-block .parent{text-aling:center}; .child {disp ...

  7. java方向及学习方法

    随笔:由于回首最近刚刚上班的缘故,平时基本没时间上播客了,所以回首会定期的抽时间分享一些干货给朋友们,就是周期不会像之前那么频繁了.最近有朋友跟回首说想没事儿的时候自学Java,但苦于不知道怎么去学, ...

  8. java推送数据到app--极光推送

    之前项目有用到需要把数据推送到app端 采用的是极光推送 特此把工具类和pom.xml需要的jar整理如下 pom.xml需要jar如下 <!-- 极光推送 --> <depende ...

  9. Benchmark Test On Android Devices

    一.Android设备上的Benckmark测试概述 同PC相比,在Android设备上的性能测试还没有一个公认的标准.也没有PC上那么多的测试程序集.但我们可以通过一些工具所得到的信息更好的了解设备 ...

  10. (笔记):组合and继承之访问限制(二)

    上篇简单介绍了public与private的基本使用.private的访问限制相对复杂.针对这种访问属性,我们会想到有没有一种方式可以无视这种属性.答案是:有.我们可以通过friend的方式(可以破解 ...