题目https://www.lydsy.com/JudgeOnline/problem.php?id=1559
题解https://www.cnblogs.com/LadyLex/p/7514403.html
关键:首先不要看错题意,是自己随便构造串包含给定串即可,不是用给定串拼接(所以拼接的方案数怎么做啊)
AC自动机疯狂打错,我在干什么?
往后加一个字符应该从该节点开始,而不是fail[x]
for的时候每次变量名都要清空
dp时把长度放在第一维便于调试
输出方案就是倒着dp合法方案
要去个重,目标串就是在fail树上的叶子
`
#include
这里写代码片
define maxn 120
define N 1200
typedef long long ll;
ll f[maxn][26][N],ans;
int fail[maxn],deg[maxn],tag[maxn],next[maxn][26],num[maxn],cnt;
int n,L,tot,cur,K;
int q[maxn],hh,tt;
char ch[maxn];
struct node{
char s[maxn];
bool operator < (node a)const{
int l1 = strlen(s + 1) , l2 = strlen(a.s + 1);
for (register int i = 1 ; i <= min(l1,l2) ; i++)
if ( s[i] != a.s[i] )
return s[i] < a.s[i];
return l1 < l2;
}
void print(){
//puts(s);
int l = strlen(s + 1);
for (int i = 1 ; i <= l ; i++) cout<