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. 【java】HashSet

    package com.tn.hashSet; public class Person { private int id; private String name; private String bi ...

  2. Mac shell笔记

    用来自动执行一些前端发布的操作. 脚本: # webReleasePath用来发布的目录,webRevisionPath是开发的目录 webReleasePath='/Users/lufeng/Doc ...

  3. 为Python添加中文关键字

    狗屎咖啡 2 个月前 原址: https://zhuanlan.zhihu.com/p/31159526 swizl/cnpython 1. 大部分语法,可以按下面方法加同义的中文token第1步. ...

  4. SQL基础学习_06_集合运算和联结

    集合运算 1. 并集:UNION     例:     SELECT shohin_id, shohin_mei    FROM Shohin    UNION    SELECT shohin_id ...

  5. Matplotlib初体验

    为一个客户做了关于每个差异otu在时间点上变化的折线图,使用python第一次做批量作图的程序,虽然是很简单的折线图,但是也是第一次使用matplotlib的纪念. ps:在第一个脚本上做了点小的改动 ...

  6. DevOps/TestOps概念

    天下大势分久必合合久必分,早期的软件开发只有软件工程师一人完成,为了提高效率逐渐实行分工模式:开发.测试.运维.不同角色担任不同的任务.分工越来越细之后带来了问题也越来越突出,那就是各角色之间的沟通成 ...

  7. [js高手之路]html5 canvas动画教程 - 边界判断与反弹

    备注:本文后面的代码,如果加载了ball.js,那么请使用这篇文章[js高手之路] html5 canvas动画教程 - 匀速运动的ball.js代码. 边界反弹: 当小球碰到canvas的四个方向的 ...

  8. hadoop集群篇--从0到1搭建hadoop集群

    一.前述 本来有套好好的集群,可是不知道为什么虚拟机镜像文件损坏,结果导致集群不能用.所以不得不重新搭套集群,借此机会顺便再重新搭套吧,顺便提醒一句大家,自己虚拟机的集群一定要及时做好快照,最好装完每 ...

  9. css实现切角效果

    1. 一个切角 思路:如果我们要得到有一个切角的元素,我们只需要使用一个径向渐变就可以达到这个目标,这个渐变需要把一个透明色标放在切角处,然后再相同的位置设置另一个色标,并且把它的颜色设置成我们想要的 ...

  10. 基于 socket.io 的 AI 服务 杂谈

    为什么会想到来聊下这个话题. 前几天在公司的项目中,开发一个基于 socket.io 的直播 IM 功能. 直播分为两部分,一部分是比较昂贵的 视频推流, 另外一部分是 IM 即时聊天服务. 从这里开 ...