传送门

好像这题的确只能用AC自动机做了……Aufun大佬太强啦

正着难我们反着做,用总共单词个数减去没有一个单词都不包含的

然后考虑怎么处理一个单词都不包含的,就是跑不到单词的结尾节点

定义$f[i][j]$为当前在自动机上$j$点且串长为$i$时的方案总数,然后只要从父亲往儿子不断转移就好了

顺便注意如果一个单词后缀是另一个单词那这个单词也不能走

话说好像SAM还是可以做啊,和AC自动机差不多的做法?不过懒得打了所以也不知道到底可不可以

 1 //minamoto
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<queue>
 6 using namespace std;
 7 const int N=10005,mod=10007;
 8 int ch[N][26],End[N],fail[N],f[105][N];char s[N];
 9 int n,m,tot,ans,sum;
10 queue<int> q;
11 inline void init(){
12     int u=0,len=strlen(s+1);
13     for(int i=1;i<=len;++i){
14         int x=s[i]-'A';
15         if(!ch[u][x]) ch[u][x]=++tot;
16         u=ch[u][x];
17     }
18     End[u]|=1;
19 }
20 void build(){
21     for(int i=0;i<26;++i)
22     if(ch[0][i]) q.push(ch[0][i]);
23     while(!q.empty()){
24         int u=q.front();q.pop();
25         for(int i=0;i<26;++i){
26             if(!ch[u][i]){
27                 ch[u][i]=ch[fail[u]][i];continue;
28             }
29             End[ch[u][i]]|=End[ch[fail[u]][i]],
30             fail[ch[u][i]]=ch[fail[u]][i];
31             q.push(ch[u][i]);
32         }
33     }
34 }
35 inline int ksm(int x,int y){
36     int res=1;
37     while(y){
38         if(y&1) (res*=x)%=mod;
39         (x*=x)%=mod,y>>=1;
40     }
41     return res;
42 }
43 int main(){
44 //    freopen("testdata.in","r",stdin);
45     scanf("%d%d",&n,&m);
46     for(int i=1;i<=n;++i)
47     scanf("%s",s+1),init();
48     build();
49     f[0][0]=1;
50     for(int i=1;i<=m;++i)
51     for(int j=0;j<=tot;++j)
52     for(int k=0;k<26;++k)
53     if(!End[ch[j][k]]) (f[i][ch[j][k]]+=f[i-1][j])%=mod;
54     for(int i=0;i<=tot;++i) (ans+=f[m][i])%=mod;
55     sum=ksm(26,m);
56     printf("%d\n",(sum-ans+mod)%mod);
57     return 0;
58 }

转载于:https://www.cnblogs.com/bztMinamoto/p/9642136.html

洛谷P4052 [JSOI2007]文本生成器(AC自动机)相关推荐

  1. BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 3953  Solved: 1614 [Submit][St ...

  2. [BZOJ1030]:[JSOI2007]文本生成器(AC自动机+DP)

    题目传送门 题目描述: JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机 ...

  3. [BZOJ1030] [JSOI2007] 文本生成器 (AC自动机 dp)

    Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机 ...

  4. 1030: [JSOI2007]文本生成器 ac自动机+dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=1030 求长度为m不包含n个子串的种数, 跑完ac自动机之后没办法跑矩阵快速幂,因为状态数比较大(6 ...

  5. 洛谷P5357 - 【模板】AC自动机(二次加强版)(AC自动机+fail树)

    题目链接:点击查看 题目大意:给出n个模式串,问在主串中分别出现了多少次 题目分析:如果像以往那样,在匹配的时候fail指针乱跳的话,那么是错误的AC自动机使用方法,时间复杂度也大大上升,接近于暴力的 ...

  6. bzoj 1030: [JSOI2007]文本生成器(AC自动机+DP)

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 5187  Solved: 2136 [Submit][St ...

  7. [BZOJ1030] [JSOI2007]文本生成器

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Description JSOI交给队员ZYX一个任务,编制一个称之为&qu ...

  8. [BZOJ1030][JSOI2007]文本生成器

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 5025  Solved: 2080 [Submit][St ...

  9. 【BZOJ1030】[JSOI2007] 文本生成器(AC自动机上跑DP)

    点此看题面 大致题意: 给你\(N\)个字符串(只含大写字母),要你求出有多少个由\(M\)个大写字母构成的字符串含有这\(N\)个字符串中的至少一个. \(AC\)自动机 看到题目,应该比较容易想到 ...

  10. [JSOI2007]文本生成器

    Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 4962  Solved: 2055 [Submit][Status][Discuss] Descrip ...

最新文章

  1. Laravel中Redis的配置和使用
  2. 25页PPT带你吃透微信、陌陌等著名IM软件设计架构(值得珍藏)
  3. 阿里云移动端播放器高级功能---截图和音频波形
  4. 【0805作业】模拟多人爬山
  5. php 蓝奏网盘上传文件,蓝奏云_文件上传_API
  6. 各种水龙头拆卸图解_水龙头上包卫生纸,竟有这种效果!邻居看了都想学
  7. Linux下redis的安装及用法
  8. h3c linux静态链路聚合,H3C静态链路聚合与典型配置.doc
  9. javascript中打印对象显示[object object]_扒一扒JavaScript中不常见的一些object
  10. win2003 sp2 设置NLB
  11. Java 高阶 —— native 关键字与 JNI
  12. python机器学习案例系列教程——GBDT算法、XGBOOST算法
  13. 配置vivado用vscode编辑文本
  14. 读取工程下的文档 统计重复的姓名 并按次数排序 java_当多个节点有相同名字但是内容不同的时候,生成的类名是相同的,导致导入项目中的时候不好识别。...
  15. AArch64架构内存布局及线性地址转换
  16. GDB attach 调试
  17. sdnu 1078
  18. 如何用ChatGPT做一门课?(包含大纲、脚本、PPT文本)
  19. 使用Stratasys创建3D打印医学模型的工作流程
  20. 韩版机泛泰A850改mms.apk去除收到短信的国家代码

热门文章

  1. 5基于matplotlib的python数据可视化——导入Excel数据制作折线图
  2. Python数据分析的几种绘图方式——数据可视化(附源码)
  3. JS中阿拉伯数字转中文数字
  4. AST实战|某CloudFlare 5秒盾第一层混淆代码一键还原思路分享
  5. Excel文件批量删除指定行或列
  6. 如何使用移动硬盘安装系统?
  7. SpringBoot全局异常处理(三十)
  8. 【持续更新】2000-2022年英伟达历代桌面Quadro显卡列表,Quadro显卡发布日期
  9. 怪兽星座欲并购,运动饮料成为新战场?
  10. 利用ViewItems来管理我们ListView项之间的drag-and-drog