分析:
对 n n n个字符串跑一边AC自动机,建立fail树(即由fail指针组成的树),令每个点的点权为在Trie树上经过这个点的字符串的数量。则每个点所代表的的字符串在所有单词中出现次数显然为这个点在fail树上的子树的点权和,跑一遍树形DP,记录一下每个单词的位置输出即可。
具体看代码
Code:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 220,maxm = 1e6 + 50;
int n,cnt,l,r,a[maxn],f[maxm],nxt[maxm],t[maxm][26],q[maxm];
char s[maxm];
void