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. KVO的内部实现以及使用

    转载自:http://www.cocoachina.com/applenews/devnews/2014/0107/7667.html   KVO是实现Cocoa Bindings的基础,它提供了一种 ...

  2. 第四节:dingo/API 最新版 V2.0 之 Responses (连载)

    因为某些某些原因,不能按时更新,唉.我会尽力,加快速度.(这句话不是翻译的哈) 原文地址--> https://github.com/dingo/api/wiki/Responses A fun ...

  3. Equilibrium point

    Given an array A your task is to tell at which position the equilibrium first occurs in the array. E ...

  4. 【bzoj3809】Gty的二逼妹子序列

    Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们 ...

  5. 《重新定义公司 - Google 是如何运营的》重点摘录

      赋能:创意时代的组织原则 未来企业的成功之道,是聚集一批聪明的创意精英,营造合适的氛围和支持环境,充分发挥他们的创造力,快速感知用户需求,愉快地创造响应的产品和服务.未来组织的最重要功能,那就是赋 ...

  6. install pytorch

    1. install and update pip3 2. install numpy and scipy 3. install pytorch

  7. shell 踩坑记

    变量赋值时,等号两边不能有空格: 在判断表达式中,不论是 [ -n "$1" ] 还是 [ -f  "$1" ] 都要在变量两侧加上双引号: 在使用与或非判断式 ...

  8. shell脚本-批量执行机器命令

    场景:通过跳板机,批量获取线上机器日志 使用方式:run2 host 'ls -al /home/admin/' #! /bin/sh USER_NAME=$USER if [ $# -ne 2 ]; ...

  9. 记录python学习过程中的一些小心得

    1.python中一切皆对象,内置数据结构也是对象.处理一个对象就是利用它带有的方法和属性,对该对象进行处理,一步步达到我们想要的结果. 2.编程时,先构思好我们处理的对象是什么,具有哪些属性和方法, ...

  10. SQL语言的分类

    本文转自https://www.cnblogs.com/fjfzhkb/archive/2007/10/18/929108.html SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, ...