description
给出p个长度不超过10的字符串,字符集大小为n。
如果这p个串都不是字符串s的子串,则认为s是幸运的。
求长度为m的幸运串个数。
analysis
-
ACACAC自动机+DP+DP+DP,终于巩固下ACACAC自动机的知识
-
首先对于ppp个串建自动机,常规操作
-
注意若自动机上用一点failfailfail连向的点不可走,则把该点也标记不可走
-
设f[i][j]f[i][j]f[i][j]表示填了iii位的字母、在自动机上第jjj号点的方案数
-
那么f[i+1][k]+=f[i][j]f[i+1][k]+=f[i][j]f[i+1][k]+=f[i][j],此处kkk为枚举填下个字母的合法点
-
即若jjj点不可填下个字母,则向failfailfail跳,直到某点可填该字母
-
没取模自然套上高精度板子
code
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#define MAXN 55
#define MAX 505
#define MAXLEN 105
#define ll long long
#define fo(i,a,b) for (ll i=a;i<=b;++i)
#define fd(i,a,b) for (ll i=a;i>=b;--i)
using namespace std;
ll next[MAX][MAXN],fail[MAX],sum[MAX];
ll n,m,p,root,tot;
ll turn[

最低0.47元/天 解锁文章
318

被折叠的 条评论
为什么被折叠?



