AC Automaton

简单复习一下字符串,顺便存个板子。

// Problem: P3808 【模板】AC自动机(简单版)
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3808
// Memory Limit: 512 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=5000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
int tr[N][26],idx,cnt[N];
int fail[N];
char s[N];int newnode() {int u=++idx; cnt[u]=0;for(int i=0;i<26;i++) tr[u][i]=0;return u;
}void insert() {int n=strlen(s+1);int p=0;for(int i=1;i<=n;i++) {int u=s[i]-'a';if(!tr[p][u]) tr[p][u]=newnode();p=tr[p][u];}cnt[p]++;
}void getfail() {queue<int>q;for(int i=0;i<26;i++) if(tr[0][i]) {fail[tr[0][i]]=0;q.push(tr[0][i]);}while(q.size()) {int u=q.front(); q.pop();for(int i=0;i<26;i++) {int p=tr[u][i];if(p) fail[p]=tr[fail[u]][i],q.push(p);else tr[u][i]=tr[fail[u]][i];}}
}int query() {int ans=0;int n=strlen(s+1);int p=0;for(int i=1;i<=n;i++) {int u=tr[p][s[i]-'a'];while(u&&cnt[u]!=-1) {ans+=cnt[u]; cnt[u]=-1;u=fail[u];}p=tr[p][s[i]-'a'];}return ans;
}int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);idx=0; for(int i=0;i<26;i++) tr[0][i]=0;scanf("%d",&n);for(int i=1;i<=n;i++) {scanf("%s",s+1);insert();}getfail();scanf("%s",s+1);printf("%d\n",query());return 0;
}
/**/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

selenium搜狗搜图简单操作(爬取任意关键字的图片)

Picture preview Steps 这里以搜狗搜图作为一个简单的例子&#xff1a; 第一步就是获取我们的需求了&#xff0c;输入需要下载的图片名字以及需要下载的图片数量。 接下来我们需要在搜狗搜图中输入用户的需求&#xff0c;透过xpathxpathxpath锁定搜索框&#xff0c;然后输入…

Microsoft REST API指南

经过3个月的碎片时间的翻译和校验&#xff0c;由长沙.NET技术社区翻译的英文原文文档《Microsoft REST API指南 》已经翻译完成&#xff0c;现刊载前十一章如下&#xff0c;欢迎大家点击“查看原文”按钮&#xff0c;查看指南的完整内容。PS&#xff1a;内容很长&#xff0c;全…

D. Salary Changing(二分,前缀和,贪心,瞎搞)

Salary Changing Thinking 这道题第一思路就是二分&#xff0c;模拟了一下样例&#xff0c;感觉好像行于是就开始写。 对于二分&#xff0c;我们一定是二分中位数是什么&#xff0c;二分的边界对我们来说是非常重要的&#xff0c;所以我们在二分前有必要确认我们的二分边界&…

如何优雅地替换一个实现

前两天&#xff0c;我所在的项目有一个小的技术改动&#xff0c;打算把访问Redis的密码从数据库挪到配置文件里。以前的代码类似下面这样&#xff1a;用户第一次调用GetDatabase时&#xff0c;根据传入的数据库连接字符串访问数据库&#xff0c;从某个表里取出带密码的Redis连接…

莫队——三种题型

普通莫队 P3901 数列找不同 Thinking 一定是用可以用莫队来写题&#xff0c;这点是不用质疑的&#xff0c;所以那就简单了&#xff0c;只需要判断每次询问的区间是否满足r−l1numr - l 1 numr−l1num就行了。 Coding1Coding_1Coding1​ 莫队写法 #include <bits/stdc…

P5357 【模板】AC自动机(二次加强版) fail树

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 这个只能搞failfailfail树了&#xff0c;让后跑一遍即可。 重复的字符串记一个&#xff0c;让后其他的都跟他一个答案即可。 // Problem: P3796 【模板】AC自动机&#xff08;加强版&…

10分钟了解一致性hash算法

应用场景当我们的数据表超过500万条或更多时&#xff0c;我们就会考虑到采用分库分表&#xff1b;当我们的系统使用了一台缓存服务器还是不能满足的时候&#xff0c;我们会使用多台缓存服务器&#xff0c;那我们如何去访问背后的库表或缓存服务器呢&#xff0c;我们肯定不会使用…

Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 你有nnn个装备槽&#xff0c;每个槽里面有cic_ici​个力量加成&#xff0c;对于每个槽只能选一个力量加成&#xff0c;现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2,...,b_n][b1​,b2​,...,bn​]代表这个力…

[SCOI2008]着色方案(DP)

题目链接 思想 显然我们后面的决策是跟前一步相关的&#xff0c;因此我们可以考虑DP&#xff0c;可以用一个15维的数组来进行转移&#xff0c;但是这样显然回mle&#xff0c;所以我们考虑如何压缩状态&#xff0c;由于1<Ci<51 < C_i < 51<Ci​<5&#xff0…

创业周年记:召唤神龙一周年小记

2018年8月8日&#xff0c;我决定离开腾讯的光环&#xff0c;辞职开始创业。《回顾4180天在腾讯使用C#的历程&#xff0c;开启新的征途》记录了我所说的拥有七龙珠&#xff0c;去召唤神龙&#xff0c;今天正好历时一年时间&#xff0c;非常有必要来回顾过去一年的创业历程。迎接…

1285. 单词 ac自动机 + fail树

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 一篇论文由若干单词构成&#xff0c;且单词间是隔开的&#xff0c;给你nnn个单词&#xff0c;要求你计算每个单词在论文中出现了多少次。 1≤n≤2001\le n\le 2001≤n≤200&#xff0c;所有单词总长不超过1e…

Bitset瞎搞

Bitset字符匹配 Regular Number /*Author : lifehappy */ #pragma GCC optimize(2) #pragma GCC optimize(3) #include <bits/stdc.h> #define mp make_pair #define pb push_back #define endl \nusing namespace std;typedef long long ll; typedef unsigned long lo…

「数据ETL」从数据民工到数据白领蜕变之旅(三)-除了Excel催化剂之外PowerQuery新物种同样值得期待...

在自助式BI时代以前&#xff0c;Excel级别的数据ETL工作&#xff0c;非常低效&#xff0c;动不动就要启用VBA来完成一些常见的需求&#xff0c;自带的原生功能&#xff0c;未能满足大量的繁琐数据ETL刚需功能。在Excel2010后&#xff0c;PowerQuery以插件的形式横空出现&#x…

Codeforces Round #743 (Div. 2) D. Xor of 3 模拟 + 构造

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个010101序列aaa&#xff0c;定义一次操作是选择一个[1,n−2][1,n-2][1,n−2]范围内的下表&#xff0c;将ai,ai1,ai2a_i,a_{i1},a_{i2}ai​,ai1​,ai2​都变成ai⊕ai1⊕ai2a_i\oplus a_{i1} \oplus a_…

Docker系列之烹饪披萨(二)

上一篇我们讲解了虚拟机和容器的区别&#xff0c;本节我们来讲讲Docker中关于Dockerfile、镜像、容器等基本概念。Docker是一个在容器内开发、部署、运行应用程序的平台&#xff0c;Docker本质上是容器化的代名词&#xff0c;容器对于提高软件开发和数据科学的安全性&#xff0…

线段树平方和板子

题目测试链接 代码 /*Author : lifehappy */ #pragma GCC optimize(2) #pragma GCC optimize(3) #include <bits/stdc.h> #define mp make_pair #define pb push_back #define endl \n #define mid (l r >> 1) #define lson rt << 1, l, mid #define rson…

Codeforces Round #743 (Div. 2) E. Paint 区间dp + 暴力

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个有nnn个像素的图像&#xff0c;每个像素都有一个颜色aia_iai​&#xff0c;保证每种颜色的图像不会超过202020个。你现在每次可以选择一个颜色&#xff0c;并选择一段连续的像素&#xff0c;要求连续…

史上最能“拜客户教”的公司,是如何做到持续交付的?(第2趴)|DevOps案例研究...

内容来源&#xff1a;DevOps案例深度研究 –Amazon持续交付之道战队&#xff08;本文只展示部分PPT及研究成果&#xff0c;更多细节请关注案例分享会&#xff0c;及本公众号。&#xff09;本案例内容贡献者&#xff1a;单冰 (Topic Leader)、 赵栋、梁兴龙、李杰、毛艳清、牛恒…

C 简单瞎搞题(牛客练习赛22)(bitset优化dp)

Bitset优化Dp 题目链接 一般DP做法 显然后面的数是与前面的数字相关的&#xff0c;所以我们有dp数组&#xff0c;dp[i][j]dp[i][j]dp[i][j]选取了jjj个数&#xff0c;iii是否可以被创造出来&#xff0c;如果可以其值为1&#xff0c;否则为0。 所以我们显然有如下的状态转移…

AtCoder Regular Contest 125

传送门 A−DialUpA-Dial UpA−DialUp 贪心贪心贪心 首先当bbb有aaa没有的元素的时候显然无解&#xff0c;否则我们可以找到离a1a_1a1​最近的一个!a1!a_1!a1​&#xff0c;让后交替着来构造bbb即可。 int n,m; int a[N],b[N];int main() { // ios::sync_with_stdio(false); /…