cjoj P1435 - 【模板题 USACO】AC自动机 && 洛谷 P3796 【模板】AC自动机(加强版)
又打了一遍AC自动稽。
海星。
好像是第一次打trie图,很久以前就听闻这个思想了。OrzYYB~
// It is made by XZZ
#include<cstdio>
#include<algorithm>
#include<cstring>
#define il inline
#define rg register
#define vd void
#define sta static
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
struct node{
int son[26];
int fail;
int tot;
}S[150*75];int id;
char T[150][75],str[1000001];
int len[150];
il int newnode(){
++id;
for(rg int i=0;i<26;++i)S[id].son[i]=0;
S[id].fail=S[id].tot=0;
return id;
}
il vd insert(char*s,int n){
int x=0;
for(rg int i=0;i<n;++i)
if(S[x].son[s[i]-'a'])x=S[x].son[s[i]-'a'];
else x=S[x].son[s[i]-'a']=newnode();
}
int que[501],hd,tl;
il vd build_fail(){
hd=tl=0;
for(rg int i=0;i<26;++i)
if(S[0].son[i]){
int x=S[0].son[i];
que[tl++]=x;
S[x].fail=0;
}
while(hd^tl){
int x=que[hd];
for(rg int i=0;i<26;++i)
if(S[x].son[i]){
que[tl++]=S[x].son[i];
S[S[x].son[i]].fail=S[S[x].fail].son[i];
}else S[x].son[i]=S[S[x].fail].son[i];
++hd;
}
}
int main(){
#ifdef xzz
freopen("3796.in","r",stdin);
freopen("3796.out","w",stdout);
#endif
while(1){
int n=gi();if(!n)break;
id=0;
for(rg int i=0;i<26;++i)S[0].son[i]=0;
S[0].fail=S[0].tot=0;
for(rg int i=1;i<=n;++i)scanf("%s",T[i]+1),len[i]=strlen(T[i]+1),insert(T[i]+1,len[i]);
build_fail();
scanf("%s",str+1);
int m=strlen(str+1);
int x=0;
for(rg int i=1;i<=m;++i)x=S[x].son[str[i]-'a'],++S[x].tot;
for(rg int i=tl-1;i;--i){
x=que[i];
S[S[x].fail].tot+=S[x].tot;
}
static int ans[151];
for(rg int i=1;i<=n;++i){
int x=0;
for(rg int j=1;j<=len[i];++j)x=S[x].son[T[i][j]-'a'];
ans[i]=S[x].tot;
}
ans[0]=0;for(rg int i=1;i<=n;++i)ans[0]=std::max(ans[0],ans[i]);
printf("%d\n",ans[0]);
for(rg int i=1;i<=n;++i)if(ans[i]==ans[0])printf("%s\n",T[i]+1);
}
return 0;
}
cjoj P1435 - 【模板题 USACO】AC自动机 && 洛谷 P3796 【模板】AC自动机(加强版)的更多相关文章
- 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...
- 洛谷P1120 小木棍 [数据加强版](搜索)
洛谷P1120 小木棍 [数据加强版] 搜索+剪枝 [剪枝操作]:若某组拼接不成立,且此时 已拼接的长度为0 或 当前已拼接的长度与刚才枚举的长度之和为最终枚举的答案时,则可直接跳出循环.因为此时继续 ...
- 【AC自动机】洛谷三道模板题
[题目链接] https://www.luogu.org/problem/P3808 [题意] 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. [题解] 不再介绍基础知识了,就是裸的模 ...
- 洛谷-P5357-【模板】AC自动机(二次加强版)
题目传送门 -------------------------------------- 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,还是要解决跳fail边产生的重复访问,但 ...
- 洛谷P3796 - 【模板】AC自动机(加强版)
原题链接 Description 模板题啦~ Code //[模板]AC自动机(加强版) #include <cstdio> #include <cstring> int co ...
- 洛谷P3796 【模板】AC自动机(加强版)(AC自动机)
洛谷题目传送门 先膜一发yyb巨佬 orz 想学ac自动机的话,推荐一下yyb巨佬的博客,本蒟蒻也是从那里开始学的. 思路分析 裸的AC自动机,这里就不讲了.主要是这题太卡时了,尽管时限放的很大了.. ...
- 洛谷-P3796-【模板】AC自动机(加强版)
题目传送门 -------------------------------------- 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,在fail边的基础上再加一个last边, ...
- 洛谷 P3808 【模板】AC自动机(简单版)洛谷 P3796 【模板】AC自动机(加强版)
https://www.cnblogs.com/gtarcoder/p/4820560.html 每个节点的后缀指针fail指针指向: 例如he,she,his,hers的例子(见蓝书P214): 7 ...
- 【最大流ISAP】洛谷P3376模板题
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
随机推荐
- [翻译] FeSpinner
FeSpinner The loader collection for iOS app. 收集的iOS加载动画. REQUIREMENT FeSpinner work on any version i ...
- 设置邮箱发送服务|邮箱开始SMTP服务和腾讯云解封25端口的经验总结
原文链接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?id=7dfaaf63-d36f- ...
- 《C++ Primer Plus》读书笔记之八—对象和类
第十章 对象和类 1.面向对象编程(OOP)的特性:抽象.封装和数据隐藏.多态.继承.代码的重用性. 2.指定基本类型完成了3项工作:①决定数据对象需要的内存数量.②决定如何解释内存中的位(lon ...
- Asp.Net网站的的编译与发布原理
如下所示创建一个简单的asp.Net Web应用程序 在VS中生成解决方案之后,可以在项目的目录下看到以下的文件: ...
- October 07th 2017 Week 40th Saturday
Knowledge is a treasure but practice is the key to it. 知识是宝藏,但实践才是打开它的钥匙. Experience often comes fro ...
- webpack react 单独打包 CSS
webpack react 单独打包 CSS webpack require css的方法,默认会把css 打入到js文件中,加载顺序有问题,如果需要打出独立的css文件 操作步骤: step1: 安 ...
- Echarts使用小结
还是先来简单的了解一下Echart是什么吧? ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前 ...
- TCL函数“参数自动补全” 与 “help 信息显示”
tcl 函数参数自动补全和 help 信息显示 在EDA tool 中使用命令时,命令的参数可以通过 tab 键自动补全,而且可以使用 -help 显示帮助信息,使用起来很方便: 那么我们自己编写的 ...
- ps命令使用详解
转自:http://blog.csdn.net/lsbhjshyn/article/details/18549869 ps:要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程 ...
- (转)CentOS 7 —— /etc/rc.local 开机不执行 - 解决方法
chmod +x /etc/rc.d/rc.localsystemctl enable rc-local.service Note: rc.local is obsolete. ----------- ...