ac自动机板子
hdu2222
#include<bits/stdc++.h>
#define ll long long
#define M 500005
using namespace std;
int tr[M][30],T,n,i,fail[M],cnt[M],sz;
char s[1000005];
void add(char *s){
int len=strlen(s),u=0;
for(int i=0;i<len;i++){
if(!tr[u][s[i]-'a'])tr[u][s[i]-'a']=++sz;
u=tr[u][s[i]-'a'];
}
cnt[u]++;
}
void getfail(){
fail[0]=0;
queue<int>Q;
for(int i=0;i<26;i++){
int u=tr[0][i];
if(u){
fail[u]=0;Q.push(u);
}
}
while(!Q.empty()){
int u=Q.front();Q.pop();
for(int i=0;i<26;i++){
int v=tr[u][i];
if(v){
fail[v]=tr[fail[u]][i];
Q.push(v);
}else
tr[u][i]=tr[fail[u]][i];
}
}
}
ll Find(char *s){
int len=strlen(s),u=0;
ll ans=0;
for(int i=0;i<len;i++){
u=tr[u][s[i]-'a'];
for(int j=u;j&&cnt[j]!=-1;j=fail[j]){
ans+=cnt[j];
cnt[j]=-1;
}
}
return ans;
}
int main(){
cin>>T;
while(T--){
memset(tr,0,sizeof(tr));
memset(cnt,0,sizeof(cnt));
sz=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",s);add(s);
}
getfail();
scanf("%s",s);
printf("%lld\n",Find(s));
}
}
ac自动机板子的更多相关文章
- 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> ...
- AC自动机板子(from. qwer)
#include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> ...
- Keywords Search HDU - 2222 AC自动机板子题
In the modern time, Search engine came into the life of everybody like Google, Baidu, etc. Wiskey al ...
- 模板 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 ...
随机推荐
- Codeforces Round #520 (Div. 2)
Codeforces Round #520 (Div. 2) https://codeforces.com/contest/1062 A #include<bits/stdc++.h> u ...
- Codeforces Beta Round #29 (Div. 2, Codeforces format)
Codeforces Beta Round #29 (Div. 2, Codeforces format) http://codeforces.com/contest/29 A #include< ...
- Jmeter 录制脚本(二)
1)选择WorkBench,右键 Add -> Non-Test Elements -> HTTP(S) Test Script Recorder 2)在HTTP(S) Test Scri ...
- string类的一些函数方法
1.请查看String.equals()方法的实现代码,注意学习其实现方法: (1)源程序: public class StringEquals { /** * @param args the com ...
- 问题1:设置了text-overflow : ellipsis未起作用
<style type="text/css"> * { padding: 0; } .div01 , .div02 { margin-top: 10px; border ...
- Java-排序算法-冒泡排序
一.冒泡排序的原理 冒泡排序,就是从第一个元素开始,通过两两交换,使小的先冒出来,然后再走第二轮使次小的冒出来,直到最后一轮最大的冒出来,排序完成 二.冒泡排序的伪代码实现: bubblesort(A ...
- 退出vim
不保存修改的退出方法: 先按esc,再依次按下:q!,最后按回车. 保存修改的退出方法: 先按esc,再依次按下:wq,最后按回车.
- 支付宝H5 与网页端支付开发
在日常生活中,我们基本上都是进行微信与支付宝的支付方式尽心支付,这种方式确实大大便利了我们的生活,那么如何在我们的产品中进行微信与支付宝支付的植入开发呢? 我们先进行支付宝的H5与网页端支付开发,这里 ...
- day 08 函数
函数初始: 什么是函数? 函数:是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段 一个函数封装一个功能. 1,减少重复代码. 2,增加代码的可读性. 函数的结构 def my_len(): ...
- git ----(2)
Git使用40个16进制字符的SHA-1 Hash来唯一标识对象 Git的四种基本对象类型,组成了Git更高级的数据结构: blobs: 每个blob代表一个(版本的)文件,blob只包含文 ...