
AC自动机
穷源溯流
路很长,尽管走便是。
-
原创 ZOJ 3430 Detect the Virus(AC自动机)
给出 n 个模式串以 base64 编码,再给出 m 个文本串以 base64 编码,问这 m 个文本串中出现过多少次模式串题目若是没有以 base64 编码为条件就是一道 AC自动机的模板题,但是区区一个编码就变成了自闭题首先搞清楚 base64 编码的规则,题目中已经给出了 hello 的样例,就是将 hello 的 acsll 码转化为二进制,然后每 6 位按题目中给出的表进行对字符进行转化,= 忽略即可而题目要求我们求文本串的匹配,自然要将给出的 base64 进行解码,由...2021-02-23 11:16:4822
1
-
原创 洛谷 P3041 [USACO12JAN]Video Game G(AC自动机+DP)
题目不难想到要应用 DP,建好 AC自动机之后dp[i][j] 表示到第i 个字符标号为j 的节点时最大的连击数是多少dp 方程也不难想由于本人实力欠缺,dp 数组的初始化为什么要设为 -1 没想明白,先给自己挖个坑 QAQconst int N=300+5; int n,m; int i,j,k; char s[N]; int t[N][3],tot=0; int vis[N],f[N]; int dp[(int)1e3+5...2021-02-22 21:20:1221
0
-
原创 HDU 3065 && 多校2009 病毒侵袭持续中(AC自动机)
AC自动机 构建完之后,由于特征码都不相同,所以沿着失配边走逐个统计即可注意有多组输入const int N=1e5+5; int n,m; int i,j,k; char s[(int)1e3+5][55]; int tot=0,t[N][128]; int vis[N],f[N]; int ans[N]; char ch[(int)2e6+5];void insert(char *s,int id){ int r...2021-02-21 11:19:1437
2
-
原创 HDU2896 && 多校2009 病毒侵袭(AC自动机)
利用 ac自动机 将源码字符串中出现的特征码找出来,用 set 存储即可const int N=1e5+5; int n,m; int i,j,k; char s[N]; int tot=0,t[N][128]; int vis[N],f[N]; set<int> all;void insert(char *s,int id){ int rt=0; for(int i=0;s[i];i++){ ...2021-02-21 10:19:5634
0
-
原创 洛谷 P3796 【模板】AC自动机(加强版)
题目要求出现最多的模式串及次数,我们目前可以利用 AC 自动机找到一个东西,那就是模式串这样不就好解决了吗?利用一个数组存取每一个模式串的出现次数,最后在统计一边就可以了const int N=1e6+5; int n,m; int i,j,k; char s[N]; int f[N]; int t[N][26],tot=0; int vis[N]; char ch[155][75]; int ans[N];int ...2021-02-18 22:07:4923
0
-
原创 洛谷 P3808 【模板】AC自动机(简单版)
AC 自动机模板题不做详细解释,但是强调几个代码中需要注意到的地方AC 自动机第一步利用字典树将模式串放入树中 第二步利用 BFS 构建 fail 指针,构造 fail 指针时需要注意,构建节点 u(x代表节点 u 中的字母)的 fail 指针时,是在其父节点位置时构造的,当 x存在时,其 fail 指针指向其父节点 fail 指针中的 x节点;而当 x不存在时,只要将 u 指向其父节点 fail 指针中的 x节点,这样可以在后续查找当中从字典树的底部跳到树顶(不明白...2021-02-18 20:42:5622
0