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行每行 ...
随机推荐
- android 常用adb 及linux 命令
一.ADB相关 adb shell:进入连接的USB调试模式设备shell命令行下 adb tcpip 5555:将USB连接的调试及的连接方式改为网络远程模式进行调试 这里端口为5555(adb 默 ...
- 用block将UIAlertView与UIActionSheet统一起来
用block将UIAlertView与UIActionSheet统一起来 效果 1. 将代理方法的实例对象方法转换成了类方法使用 2. 要注意单例block不要长期持有,用完就释放掉 源码 https ...
- 禁用休眠(删除休眠文件) 关掉此选项可节省C盘好几G空间:文章内容bat文件源码
@ECHO offTITLE 关掉休眠 MACHENIKE set TempFile_Name=%SystemRoot%\System32\BatTestUACin_SysRt%Random%.bat ...
- APUE8进程控制 fork vfork exec
- tomcat6 集群配置
1. 概要 web容器在做集群配置时,有3点需要注意: 1.1. 负载均衡配置: 1.2. session共享: 1.3. 若做的是单机集群(多个tomcat安装在同一台机器上),需要注意端口冲突问题 ...
- markdownpad 2 pro版本 注册码
注册email: www.zixue.it 注册码: 4vuvQFtGkF0oH7by922v75FtaUGq7niFveCKDxqC2KSqYTfaSGzxzxKQXNhc2BG51N9URrF7 ...
- 4521: [Cqoi2016]手机号码
4521: [Cqoi2016]手机号码 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1030 Solved: 609 [Submit][Statu ...
- javascript 中isPrototypeOf 、hasOwnProperty、constructor、prototype等用法
hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员. isPrototypeOf是用来判断要检查 ...
- Jenkins + GitLab 通过 Webhook 自动触发构建爬坑记录
前言 在局域网搭建了一个Jenkins服务,用于自动构建和发布,在调通了构建程序之后,想使用内网的GitLab的Webhook功能触发代码推送事件,然后进行自动构建.后来发现在GitLab上做测试 ...
- nodejs的expresss中post的req.body总是undefined的原因
1)因为express将body-parser分离了出来,所以你需要手动添加进下面的内容即可 var path = require('path'); var bodyParser = require( ...