建立AC自动机,因为不存在某个串是另一个串的后缀,因此匹配到任意位置都只可能匹配一个串。

预处理出每个串出现的所有位置,总的出现次数为$O(m)$。

设$f[i][j]$表示考虑了前$i$个串,最后一个串匹配位置是$j$的方案数,DP即可。

转移则是枚举$f[i-1][k]$,$j$和$k$显然可以双指针维护。

时间复杂度$O(n+m)$。

#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int N=10010,M=500010,P=1000000;
int n,i,j,k,x,t,f[2][M],ans,len[N],tot,son[N][26],id[N],fail[N],q[N];char s[M];vector<int>v[N];
inline void up(int&x,int y){x+=y;if(x>=P)x-=P;}
void ins(int p){
scanf("%s",s);
for(int l=len[p]=strlen(s),x=0,i=0,w;i<l;i++){
if(!son[x][w=s[i]-'a'])son[x][w]=++tot;x=son[x][w];
if(i==l-1)id[x]=p;
}
}
void make(){
int h=1,t=0,i,j,x;fail[0]=-1;
for(i=0;i<26;i++)if(son[0][i])q[++t]=son[0][i];
while(h<=t)for(x=q[h++],i=0;i<26;i++)if(son[x][i]){
fail[q[++t]=son[x][i]]=son[fail[x]][i];
id[son[x][i]]+=id[son[fail[x]][i]];
}else son[x][i]=son[fail[x]][i];
}
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++)ins(i);
make();
scanf("%s",s);
for(i=0;s[i];i++)if(id[x=son[x][s[i]-'a']])v[id[x]].push_back(i);
for(i=0,x=1;i<v[1].size();i++)f[1][i]=1;
for(i=2;i<=n;i++)for(x^=1,j=k=t=0;j<v[i].size();j++){
while(k<v[i-1].size()&&v[i-1][k]+len[i]<=v[i][j])up(t,f[x^1][k++]);
f[x][j]=t;
}
for(i=0;i<v[n].size();i++)up(ans,f[x][i]);
return printf("%d",ans),0;
}

  

最新文章

  1. EQueue 2.0 性能测试报告
  2. Mongodb学习笔记五(C#操作mongodb)
  3. Ubuntu14.04安装postgresql9.4
  4. 二叉查找树 C++实现(含完整代码)
  5. ansible操作远程服务器报Error: ansible requires the stdlib json or simplejson module, neither was found!
  6. English随笔1
  7. Linux下新的网络管理工具ip替代ifconfig零压力
  8. python中用filter求素数
  9. SVN查看提交日志的命令
  10. 软硬大比拼 硅胶、TPU和PC材质对比
  11. Mac系统杂项 (持续更新)
  12. C#中调用c++的dll具体创建与调用步骤,亲测有效~
  13. Socket.io 延伸
  14. jquery获取焦点和失去焦点事件代码
  15. CSDN博客测试目录
  16. 使用枚举enum
  17. Oracle中和mysql中函数的区别
  18. 2082 : Only choose one
  19. [教程]微信官方开源UI库-WeUI使用方法【申明:来源于网络】
  20. mnist全连接层网络权值可视化

热门文章

  1. C++:__stdcall详解
  2. (并发编程)线程 (理论-创建-lock-属性-守护,与进程的对比)
  3. centos6.5生产环境编译安装nginx-1.11.3并增加第三方模块ngx_cache_purge、nginx_upstream_check、ngx_devel_kit、lua-nginx
  4. centos下常用文件管理命令
  5. Android数据存储:Shared Preferences
  6. TCP template 代码
  7. SSD笔记
  8. Buffer学习笔记.
  9. [PHP] 链表数据结构(单链表)
  10. MFC单文档