正解:AC自动机+dp

解题报告:

传送门!

感觉AC自动机套dp的题还挺套路的,,,

一般就先跑遍AC自动机,然后就用dp

dp的状态一般都是f[i][j]:有i个字符,是ac自动机上的第j个节点,然后有的题目可能还要加一维用来满足一些额外要求之类的

然后听说矩阵优化dp挺常见的,,,但我还没做过这种题QAQ

然后这题就直接很套路啊,,,直接上面那种套路一点修改都没有,,,

就显然答案是所有状态-非法状态

所有状态就26m

非法状态就上面那个套路算下

然后就做完了呢,,,

放下代码趴QAQ

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define il inline
  4. #define gc getchar()
  5. #define ll long long
  6. #define ri register int
  7. #define rb register bool
  8. #define rc register char
  9. #define rp(i,x,y) for(ri i=x;i<=y;++i)
  10. #define my(i,x,y) for(ri i=x;i>=y;--i)
  11.  
  12. const int N=+,mod=;
  13. int n,m,nod_cnt,as,f[N][N*];
  14. struct nod{int to[],fail;bool flg;}tr[N*];
  15. char str[N];
  16. queue<int>Q;
  17.  
  18. il int read()
  19. {
  20. rc ch=gc;ri x=;rb y=;
  21. while(ch!='-' && (ch>'' || ch<''))ch=gc;
  22. if(ch=='-')ch=gc,y=;
  23. while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
  24. return y?x:x;
  25. }
  26. il void insert(char *s)
  27. {
  28. ri lth=strlen(s+),nw=;
  29. rp(i,,lth)
  30. {
  31. if(!tr[nw].to[s[i]-'A'+])tr[nw].to[s[i]-'A'+]=++nod_cnt;
  32. nw=tr[nw].to[s[i]-'A'+];
  33. }
  34. tr[nw].flg=;
  35. }
  36. il void bfs()
  37. {
  38. rp(i,,)if(tr[].to[i])Q.push(tr[].to[i]);
  39. while(!Q.empty())
  40. {
  41. ri nw=Q.front();Q.pop();tr[nw].flg|=tr[tr[nw].fail].flg;
  42. rp(i,,)
  43. if(tr[nw].to[i])Q.push(tr[nw].to[i]),tr[tr[nw].to[i]].fail=tr[tr[nw].fail].to[i];
  44. else tr[nw].to[i]=tr[tr[nw].fail].to[i];
  45. }
  46. }
  47. il int power(ri x,ri y){ri ret=;while(y){if(y&)ret=ret*x%mod;x=x*x%mod;y>>=;}return ret;}
  48.  
  49. int main()
  50. {
  51. n=read();m=read();rp(i,,n){scanf("%s",str+);insert(str);}bfs();
  52. as=power(,m);f[][]=;
  53. rp(i,,m-)
  54. rp(j,,nod_cnt)
  55. if(!tr[j].flg)
  56. rp(k,,)
  57. if(!tr[tr[j].to[k]].flg)f[i+][tr[j].to[k]]=(f[i+][tr[j].to[k]]+f[i][j])%mod;
  58. rp(i,,nod_cnt)as=(as+mod-f[m][i])%mod;
  59. printf("%d\n",as);
  60. return ;
  61. }

洛谷P4052 [JSOI2007]文本生成器 AC自动机+dp的更多相关文章

  1. [JSOI2007]文本生成器 --- AC自动机 + DP

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

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

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

  3. 【bzoj1030】[JSOI2007]文本生成器 AC自动机+dp

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

  4. 洛谷P4052 [JSOI2007]文本生成器(AC自动机)

    传送门 好像这题的确只能用AC自动机做了……Aufun大佬太强啦 正着难我们反着做,用总共单词个数减去没有一个单词都不包含的 然后考虑怎么处理一个单词都不包含的,就是跑不到单词的结尾节点 定义$f[i ...

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

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

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

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

  7. BZOJ1030[JSOI2007]文本生成器——AC自动机+DP

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

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

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

  9. [Bzoj1030][JSOI2007]文本生成器(AC自动机&dp)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1030 最最最常见的多串匹配问题!题目求至少包含一个子串的方案数,则可以转化成全部方案-不 ...

随机推荐

  1. Linux嵌入式时区修改

  2. 【原】在Matplotlib绘图中添加Latex风格公式

    Matplotlib绘图的过程中,可以为各个轴的Label,图像的Title.Legend等元素添加Latex风格的公式. 只需要在Latex公式的文本前后各增加一个$符号,Matplotlib就可以 ...

  3. chrome调试手机webview中页面

    http://blog.csdn.net/freshlover/article/details/42528643 注: 1. 可以调试真机上页面(USB连接)和虚拟机上页面 2. 手机系统需要4.4+ ...

  4. 《FPGA全程进阶---实战演练》第七章 让按键恢复平静

    1基础理论部分 A:“怎么按键按下去之后,结果不正常?”,B:“按键你消抖了吗?”A:“消什么抖,还要消抖?”,  B:“先检测按键变化,然后消抖过滤波动信号,最后输出稳定信号”,A:“我好像漏掉了什 ...

  5. DWZ使用中遇到的坑

    DWZ官方文档中关于文件上传表单的提交: 因为Ajax不支持enctype="multipart/form-data" 所以用隐藏iframe来处理无刷新表单提交. <for ...

  6. How to Catch Ctrl-C in Shell Script

    ref: https://stackpointer.io/script/how-to-catch-ctrl-c-in-shell-script/248/   #!/bin/sh # this func ...

  7. centos7目录统计之du命令

    CentOS下du查看计算目录大小的命令 用法实例: [root@localhost local]# du -hs smgpdfd 3.3G    smgpdfd [root@localhost lo ...

  8. Guava学习笔记(二):基础(Joiner,Objects,Splitter及Strings)

    添加Maven依赖 JoinerTest import com.google.common.base.Joiner; import org.junit.Assert; import org.junit ...

  9. laravel 5 : Class 'input' not found

     在配置文件中:config\app.php 加上 'Input' => Illuminate\Support\Facades\Input::class, 或者 引用 :use Illumina ...

  10. 设计模式-创建型模式,python享元模式 、python单例模式(7)

    享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. 享元模式尝 ...