题意

给你n个串。问有多少长度为m的串使得这n个串至少在其中出现过一次。输出答案膜10007意义下的结果。

(n<=100,每个串的长度<=100)

题解

在AC自动机上跑DP。

用到一个容斥的思想,求至少出现过一次的次数就是,全部可能-一次都没出现的次数。

所以考虑dp,对于一个长度为i的串从i-1转移,i位置上的数必须不是n个串中某个串的结尾。

所以建立AC自动机,在上面跑。一个儿子从父亲转移时必须保证,儿子节点和儿子节点通过fail指针间接到达的点,都不是终止节点。

具体看代码。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
const int mod=;
const int N=;
int n,m,tot,ans;
char s[N];
int dp[][N];
struct AC{
int nxt[],e,fail;
}ac[N];
void insert(char s[]){
// cout<<"asfsfsdfsdfs"<<endl;
int len=strlen(s);
int now=;
for(int i=;i<len;i++){
if(ac[now].nxt[s[i]-'A']==)ac[now].nxt[s[i]-'A']=++tot;
now=ac[now].nxt[s[i]-'A'];
}
ac[now].e=;
}
void get_fail(){
queue<int>q;
for(int i=;i<=;i++){
if(ac[].nxt[i]){
// cout<<"sfsd"<<endl;
q.push(ac[].nxt[i]);
}
}
while(!q.empty()){ int u=q.front();//cout<<u<<endl;
q.pop();
for(int i=;i<=;i++){
if(ac[u].nxt[i]){
ac[ac[u].nxt[i]].fail=ac[ac[u].fail].nxt[i];
ac[ac[u].nxt[i]].e|=ac[ac[ac[u].fail].nxt[i]].e;
q.push(ac[u].nxt[i]);
}
else ac[u].nxt[i]=ac[ac[u].fail].nxt[i];
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%s",s);
insert(s);
}
get_fail();
dp[][]=;
for(int i=;i<=m;i++)
for(int j=;j<=tot;j++)
for(int x=;x<=;x++){
if(ac[ac[j].nxt[x]].e==)dp[i][ac[j].nxt[x]]=(dp[i][ac[j].nxt[x]]+dp[i-][j])%mod;
}
int ans=;
for(int i=;i<=m;i++){
ans*=;
ans%=mod;
}
for(int i=;i<=tot;i++){
ans-=dp[m][i];
ans=(ans+mod)%mod;
}
printf("%d",ans);
return ;
}

最新文章

  1. scrollViewDidEndScrollingAnimation和scrollViewDidEndDecelerating的区别
  2. child-selector解释
  3. BeJavaGod - 如何正确使用数据字典进行分类统一操作(一)
  4. 记一个奇怪的python异常处理过程
  5. CentOS6.4_x86_开关机查看
  6. Supervisor 守护 dotnetcore 程序
  7. 全面理解Linux输入输出重定向
  8. SpringMVC学习总结(六)——SpringMVC文件上传例子(2)
  9. BZOJ 3142 数列(组合)
  10. Delphi GDI+ Library
  11. LightOJ 1214 Large Division 水题
  12. SQL2008转SQL2005数据库经验
  13. SDUT 2893-B(DP || 记忆化搜索)
  14. PV(访问量)、UV(独立访客)、IP(独立IP) (转)
  15. Oracle用户密码过期和用户被锁解决方法【转】
  16. ajax事件请求
  17. C语言——第一次作业
  18. Mac OS 的属性列表文件plist装换
  19. Angular6封装http请求
  20. Django基础-02

热门文章

  1. NOIP卡常数技巧
  2. jquery.cookie.js插件删除不掉cookie的问题
  3. Kafka Consumer2
  4. Photoshop CC (2015.2) 2016.1 版
  5. 转js resplace方法使用
  6. 使用maven插件dockerfile-maven-plugin生成Docker镜像并推送到镜像仓库
  7. Webpack的作用(一个基础的打包编译工具在做什么?)
  8. 异步调用task
  9. java 截取点后面的字符串
  10. 洛谷 P2744 [USACO5.3]量取牛奶Milk Measuring