网站界面怎么做,教务系统学生登录入口,京津冀协同发展河北定位,大学生创新创业平台AC自动机上DP f[i][j]表示节点j,串长为i 当一个串的尾节点被标红或其fail指针指向的被标红#xff0c;都是可读的 用总的减去不可读的即为答案 #includeiostream
#includecstring
#includecstdio
#includequeue
#define MOD (10007)
#define …AC自动机上DP f[i][j]表示节点j,串长为i 当一个串的尾节点被标红或其fail指针指向的被标红都是可读的 用总的减去不可读的即为答案  #includeiostream
#includecstring
#includecstdio
#includequeue
#define MOD (10007)
#define  N  (10005)
using namespace std;int Son[N][26],End[N],Fail[N];
int n,m,sz,f[105][N],ans;
char s[N];
queueintq;void Insert(char s[])
{int now0,lenstrlen(s);for (int i0; ilen; i){int xs[i]-A;if (!Son[now][x]) Son[now][x]sz;nowSon[now][x];}End[now]|1;
}void Build_Fail()
{for (int i0; i26; i)if (Son[0][i])q.push(Son[0][i]);while (!q.empty()){int nowq.front();q.pop();for (int i0; i26; i){if (!Son[now][i]){Son[now][i]Son[Fail[now]][i];continue;}End[Son[now][i]]|End[Son[Fail[now]][i]];Fail[Son[now][i]]Son[Fail[now]][i];q.push(Son[now][i]);}}
}int main()
{scanf(%d%d,n,m);for (int i1; in; i)scanf(%s,s),Insert(s);Build_Fail();f[0][0]1;for (int i1; im; i)for (int j0; jsz; j)for (int k0; k26; k)if (!End[Son[j][k]])(f[i][Son[j][k]]f[i-1][j])%MOD;for (int i0; isz; i)(ansf[m][i])%MOD;int sum1;for (int i1; im; i)sumsum*26%MOD;printf(%d\n,(sum-ansMOD)%MOD);
}   转载于:https://www.cnblogs.com/gengyf/p/11145875.html