AC自动机
字符串匹配
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
-
GT考试
题目链接:GT考试 设 dp[i][j] 为第一个串到位置 i ,第二个串到位置 j 的方案数。 然后:dp[i][j] = dp[i][k] * g[k][j] g数组 g[i][j] 表示,从i位置到j的方案数。 然后这个可以ac自动机或者kmp预处理,然后做一个矩阵快速幂即可。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long lo原创 2021-07-04 09:19:03 · 450 阅读 · 0 评论 -
Video Game G
题目链接:Video Game G 用AC自动机优化状压dp,然后记得统计一下fail树上的值。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using namespace std; const int N=3010; int n,m,dp[1010][N],res; char str[N]; int ed[N],fail[N原创 2021-06-23 19:51:28 · 126 阅读 · 0 评论 -
Elastic Search
题目链接:Elastic Search 我们不难发现,对于一个串,就是一直找子串,然后求一下找的最大次数。 我们可以发现,我们对于一个有子串关系的暴力建图,然后求最长路即可。 这里复杂度肯定不行,我们可以注意到,每次假设可以到 abba,也可以到ab,那么一定是前者。所以相当于就是AC自动机上面每次跳fail的一个dp。 这里为了保证复杂度,每个节点只访问一次,所以需要记忆化。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #incl原创 2021-06-15 22:12:24 · 177 阅读 · 0 评论