AC自动机板子(from. qwer)
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <string>
#include <queue>
using namespace std;
const int N=;
struct Tri
{
int Next[N][], fail[N], val[N], root, L;
void init() {L = ;root = newnode();}
int newnode()
{
for(int i = ;i < ;i++) Next[L][i] = -;
val[L++] = ;
return L - ;
} void insert(char s[])
{
int len = strlen(s), cur = root;
for(int i = ;i < len;i++)
{
if(Next[cur][s[i]-'a'] == -)
Next[cur][s[i]-'a'] = newnode();
cur = Next[cur][s[i]-'a'];
}
val[cur]++;
}
void build()
{
queue<int>Q;
fail[root] = root;
for(int i = ;i < ;i++)
if(Next[root][i] == -) Next[root][i] = root;
else
{
fail[Next[root][i]] = root;
Q.push(Next[root][i]);
}
while(!Q.empty())
{
int cur = Q.front(); Q.pop();
for(int i = ;i < ;i++)
if(Next[cur][i] == -)
Next[cur][i] = Next[fail[cur]][i];
else
{
fail[Next[cur][i]]=Next[fail[cur]][i];
Q.push(Next[cur][i]);
}
}
}
int query(char s[])
{
int len = strlen(s), cur = root, res = ;
for(int i = ;i < len;i++)
{
cur = Next[cur][s[i]-'a'];
int tmp = cur;
while (tmp != root)
{
res += val[tmp];
val[tmp] = ;
tmp = fail[tmp];
}
}
return res;
}
};
char s[N];
Tri AC;
int n;
int main()
{
scanf("%d",&n);
AC.init();
for(int i = ;i < n;i++)
{
scanf("%s",s);
AC.insert(s);
}
AC.build();
scanf("%s",s);
printf("%d\n",AC.query(s));
return ;
}
AC自动机板子(from. qwer)的更多相关文章
- AC自动机板子题/AC自动机学习笔记!
想知道484每个萌新oier在最初知道AC自动机的时候都会理解为自动AC稽什么的,,,反正我记得我当初刚知道这个东西的时候,我以为是什么神仙东西,,,(好趴虽然确实是个对菜菜灵巧比较难理解的神仙知识点 ...
- hdu_2222_Keywords Search(AC自动机板子)
题目连接:hdu_2222_Keywords Search 存个自己写的AC自动机 #include<cstdio> #include<cstring> #define F(i ...
- hdu2222 Keywords Search (AC自动机板子
https://vjudge.net/problem/HDU-2222 题意:给几个模式串和一个文本串,问文本串中包含几个模式串. 思路:贴个板子不解释. #include<cstdio> ...
- Keywords Search HDU - 2222 AC自动机板子题
In the modern time, Search engine came into the life of everybody like Google, Baidu, etc. Wiskey al ...
- ac自动机板子
hdu2222 #include<bits/stdc++.h> #define ll long long #define M 500005 using namespace std; int ...
- 模板 AC自动机
题目描述 有$N$ 个由小写字母组成的模式串以及一个文本串$T$ .每个模式串可能会在文本串中出现多次.你需要找出哪些模式串在文本串$T$ 中出现的次数最多. 输入输出格式 输入格式: 输入含多组数据 ...
- 洛谷P3966 单词 [TJOI2013] AC自动机
正解:AC自动机 解题报告: 传送门! 先来提供一个40pts错解QAQ 首先看到这题就会想到AC自动机板子题2鸭!然后就照着那题的套路打一下,随便改一点儿,简单来说就是每次经过一个节点都要++,然后 ...
- P3808 【模板】AC自动机(简单版)
题目背景 这是一道简单的AC自动机模板题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 管理员提示:本题数据内有重复的单词,且重复单词应该计算多次, ...
- 「kuangbin带你飞」专题十七 AC自动机
layout: post title: 「kuangbin带你飞」专题十七 AC自动机 author: "luowentaoaa" catalog: true tags: - ku ...
随机推荐
- Cglib学习报错 java.lang.reflect.InvocationTargetException-->null
package javacore.testForCglibProxy; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhan ...
- servlet 复习笔记
总的说来Servlet的配置包括Servlet的名字,Servlet的类(如果是JSP,就指定JSP文件),初始化参数,启动装入的优先级,servlet的映射,运行的安全设置. 下面举例介绍其配置: ...
- 【ELK】ELK5.3搭建过程遇到的问题
elasticsearch 5.3 安装过程中遇到了一些问题,这里简单记录一下 . 问题一:警告提示 [2016-11-06T16:27:21,712][WARN ][o.e.b.JNANatives ...
- valgrind报错VEX temporary storage exhausted
valgrind的使用请参考: 使用valgrind进行内存泄漏和非法内存操作检测 最近在使用valgrind进行内存泄漏检测是时,竟然报错,如下: VEX temporary storage exh ...
- JS如何定义方法及调用 精选
简单搜索了下,遇到点问题1,经常在JS中看到如var foo = function(){}的形式foo是方法名还是对象名,如果想调用此方法,是用foo(),foo.function(),还是该如何正确 ...
- 部署nginx支持lua
nginx yum -y install gcc pcre pcre-devel openssl openssl-devel GeoIP GeoIP-devel lua lua-develwget ...
- 查 101.201.62.30 IP信誉方法
查 101.201.62.30 IP信誉方法https://www.virustotal.com/#/ip-address/101.201.62.30https://talosintelligence ...
- mac下配置java运行环境
1. oracle官网下载java se jdk地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-38 ...
- 改变Ecplise项目窗口字体样式
Eclipse\plugins\org.eclipse.ui.themes_1.1.1.v20151026-1355\css e4-dark_win.css CTabFolder Tree, CTab ...
- listen 61
Multiple Stresses Killed Snail Memory Stress sucks. It can affect your body and mind. Previous resea ...