UVA 10679 I love Strings!!!(AC自己主动机)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1620
ProblemG
ILove Strings!!!
Input:Standard Input
Output:Standard Output
TimeLimit: 4 Seconds
Hmmmmmm…………strings again :) Then it must be an easy task for you. You are given with a string S of length less than 100,001, containing only characters from lower and uppercase English alphabet (‘a’-‘z’and ‘A’ – ‘Z’).
Then follows q (q < 100) queries where each query contains a string T of maximum length 1,000(also contains only ‘a’-‘z’ and ‘A’ – ‘Z’). You have to determine whether or not T is a sub-string of S.
Input
First line contains aninteger k (k < 10) telling the number of test cases to follow.Each test case begins with S. It is followed by q.After this line there are q lines each of which has a string T as defined before.
Output
For each query print ‘y’if it is a sub-string of S or ‘n’ otherwise followed by a newline. See the sample output below.
Sample Input
2
abcdefghABCDEFGH
2
abc
abAB
xyz
1
xyz
Output for Sample Input
y
n
y
Problemsetter: MohammadSajjad Hossain
题意:
给出一个文本串和若干个模式串,问模式串是否在文本串中出现过。
分析:
简单粗暴的AC自己主动机模板题。要注意模式串可能有反复的情况。
/*
*
* Author : fcbruce
*
* Time : Sat 04 Oct 2014 03:30:15 PM CST
*
*/
#include <cstdio>
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <algorithm>
#include <ctime>
#include <cctype>
#include <cmath>
#include <string>
#include <cstring>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <set>
#define sqr(x) ((x)*(x))
#define LL long long
#define itn int
#define INF 0x3f3f3f3f
#define PI 3.1415926535897932384626
#define eps 1e-10 #ifdef _WIN32
#define lld "%I64d"
#else
#define lld "%lld"
#endif #define maxm
#define maxn 1000007
#define maxsize 52 using namespace std; int q[maxn<<1];
int _id[1007];
char YN[1007];
char query[1007];
char T[maxn]; struct Trie
{
int ch[maxn][maxsize];
int val[maxn];
int sz;
Trie()
{
sz=1;
val[0]=0;
memset(ch[0],0,sizeof ch[0]);
}
void clear()
{
sz=1;
val[0]=0;
memset(ch[0],0,sizeof ch[0]);
}
int idx(const char ch)
{
if (islower(ch)) return ch-'a'+26;
return ch-'A';
} int insert(const char *s,int v=1)
{
int u=0,l=strlen(s);
for (int i=0;i<l;i++)
{
int c=idx(s[i]);
if (ch[u][c]==0)
{
val[sz]=0;
memset(ch[sz],0,sizeof ch[0]);
ch[u][c]=sz++;
}
u=ch[u][c];
} if (val[u]!=0) return val[u];
return val[u]=v;
}
}; struct ACauto :public Trie
{
int cnt;
int last[maxn];
int nex[maxn]; ACauto()
{
cnt=0;
sz=1;
val[0]=0;
memset(ch[0],0,sizeof ch[0]);
}
void clear()
{
cnt=0;
sz=1;
val[0]=0;
memset(ch[0],0,sizeof ch[0]);
} void calc(int j)
{
if (j!=0)
{
YN[val[j]]='y';
calc(last[j]);
}
} void get_fail()
{
int f=0,r=-1;
nex[0]=0;
for (int c=0;c<maxsize;c++)
{
int u=ch[0][c];
if (u!=0)
{
nex[u]=0;
q[++r]=u;
last[u]=0;
}
} while (f<=r)
{
int x=q[f++];
for (int c=0;c<maxsize;c++)
{
int u=ch[x][c];
if (u==0) continue;
q[++r]=u;
int v=nex[x];
while (v>0 && ch[v][c]==0) v=nex[v];
nex[u]=ch[v][c];
last[u]=val[nex[u]]>0? nex[u]:last[nex[u]];
}
}
} void find(const char *T)
{
get_fail();
for (int i=0,j=0;T[i]!='\0';i++)
{
int c=idx(T[i]);
while (j>0 && ch[j][c]==0) j=nex[j];
j=ch[j][c];
if (val[j]!=0)
calc(j);
else if (last[j]!=0)
calc(last[j]);
}
}
}acauto; int main()
{
#ifdef FCBRUCE
freopen("/home/fcbruce/code/t","r",stdin);
#endif // FCBRUCE int T_T;
scanf ("%d",&T_T); while (T_T--)
{
acauto.clear();
scanf("%s",T); int n;
scanf("%d",&n); for (int i=1;i<=n;i++)
{
scanf("%s",query);
_id[i]=acauto.insert(query,i);
YN[i]='n';
} acauto.find(T); for (int i=1;i<=n;i++)
printf("%c\n",YN[_id[i]]);
} return 0;
}
UVA 10679 I love Strings!!!(AC自己主动机)的更多相关文章
- 【UVA】1449-Dominating Patterns(AC自己主动机)
AC自己主动机的模板题.须要注意的是,对于每一个字符串,须要利用map将它映射到一个结点上,这样才干按顺序输出结果. 14360841 1449 option=com_onlinejudge& ...
- uva 11468 - Substring(AC自己主动机+概率)
题目链接:uva 11468 - Substring 题目大意:给出一些字符和各自字符相应的选择概率.随机选择L次后得到一个长度为L的字符串,要求该字符串不包括随意一个子串的概率. 解题思路:构造AC ...
- 【UVA】11468-Substring(AC自己主动机)
AC自己主动机的题,须要注意的,建立失配边的时候,假设结点1失配边连到的那个结点2,那个结点2是一个单词的结尾,那么这个结点1也须要标记成1(由于能够看成,这个结点包括了这个单词),之后在Trie树上 ...
- POJ 3691 & HDU 2457 DNA repair (AC自己主动机,DP)
http://poj.org/problem?id=3691 http://acm.hdu.edu.cn/showproblem.php?pid=2457 DNA repair Time Limit: ...
- hdu4758 Walk Through Squares (AC自己主动机+DP)
Walk Through Squares Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others ...
- poj 3691 DNA repair(AC自己主动机+dp)
DNA repair Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5877 Accepted: 2760 Descri ...
- HDOJ 5384 Danganronpa AC自己主动机
AC自己主动机裸题 Danganronpa Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java ...
- HDU - 4758 Walk Through Squares (AC自己主动机+DP)
Description On the beaming day of 60th anniversary of NJUST, as a military college which was Secon ...
- hdu5384 AC自己主动机模板题,统计模式串在给定串中出现的个数
http://acm.hdu.edu.cn/showproblem.php?pid=5384 Problem Description Danganronpa is a video game franc ...
随机推荐
- 第18章 Active控件
转自: https://blog.csdn.net/u014162133/article/details/46573873 容器和服务器程序 容器应用程序时可以嵌入或链接对象的应用程序.Word就是容 ...
- libevent源码分析之信号处理
新看看官方demo的libevent如何使用信号 int called = 0; static void signal_cb(int fd, short event, void *arg) { str ...
- 配置Nginx来支持php
安装php7 下载地址:https://secure.php.net/downloads.php这里下载的是:wget http://ar2.php.net/distributions/php ...
- ubuntu16.04安装flash plugin
命令:apt-get install browser-plugin-freshplayer-pepperflash
- Ubuntu配置网络遇到的一些问题
Ubuntu配置网络遇到的一些问题 在配置Ubuntu网络时,曾遇到了一些问题.查找了一些博客,所幸都解决了.记录一下,以便日后查阅. 设置DNS sudo vim /etc/resolv.conf ...
- 使用CSS3制作各种图形
1.正圆形 代码: HTML代码: <div class="circle"></div> CSS代码: .circle { width: 100px; he ...
- [BZOJ4989][Usaco2017 Feb]Why Did the Cow Cross the Road 树状数组维护逆序对
4989: [Usaco2017 Feb]Why Did the Cow Cross the Road Time Limit: 10 Sec Memory Limit: 256 MBSubmit: ...
- 陕西师范大学第七届程序设计竞赛网络同步赛 C iko和她的糖【贪心/ STL-优先队列/ 从1-N每个点有能量补充,每段有消耗,选三个点剩下最多能量】
链接:https://www.nowcoder.com/acm/contest/121/C来源:牛客网 题目描述 iko超级超级喜欢吃糖,有一天iko想出去玩,她计划从1点走到N点(按1,2,3,.. ...
- #423 Div2 C
#423 Div2 C 题意 给出 n 个字符串以及他们在 S 串中出现的位置,求字典序最小的 S 串.保证给出的字符串不会冲突. 分析 模拟就好.用并查集思想优化,数组 nxt[i] 表示从 i 开 ...
- IO 最快的read 和 write
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; impo ...