洛谷P4052 [JSOI2007]文本生成器 AC自动机+dp
正解:AC自动机+dp
解题报告:
感觉AC自动机套dp的题还挺套路的,,,
一般就先跑遍AC自动机,然后就用dp
dp的状态一般都是f[i][j]:有i个字符,是ac自动机上的第j个节点,然后有的题目可能还要加一维用来满足一些额外要求之类的
然后听说矩阵优化dp挺常见的,,,但我还没做过这种题QAQ
然后这题就直接很套路啊,,,直接上面那种套路一点修改都没有,,,
就显然答案是所有状态-非法状态
所有状态就26m
非法状态就上面那个套路算下
然后就做完了呢,,,
放下代码趴QAQ
- #include<bits/stdc++.h>
- using namespace std;
- #define il inline
- #define gc getchar()
- #define ll long long
- #define ri register int
- #define rb register bool
- #define rc register char
- #define rp(i,x,y) for(ri i=x;i<=y;++i)
- #define my(i,x,y) for(ri i=x;i>=y;--i)
- const int N=+,mod=;
- int n,m,nod_cnt,as,f[N][N*];
- struct nod{int to[],fail;bool flg;}tr[N*];
- char str[N];
- queue<int>Q;
- il int read()
- {
- rc ch=gc;ri x=;rb y=;
- while(ch!='-' && (ch>'' || ch<''))ch=gc;
- if(ch=='-')ch=gc,y=;
- while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
- return y?x:x;
- }
- il void insert(char *s)
- {
- ri lth=strlen(s+),nw=;
- rp(i,,lth)
- {
- if(!tr[nw].to[s[i]-'A'+])tr[nw].to[s[i]-'A'+]=++nod_cnt;
- nw=tr[nw].to[s[i]-'A'+];
- }
- tr[nw].flg=;
- }
- il void bfs()
- {
- rp(i,,)if(tr[].to[i])Q.push(tr[].to[i]);
- while(!Q.empty())
- {
- ri nw=Q.front();Q.pop();tr[nw].flg|=tr[tr[nw].fail].flg;
- rp(i,,)
- if(tr[nw].to[i])Q.push(tr[nw].to[i]),tr[tr[nw].to[i]].fail=tr[tr[nw].fail].to[i];
- else tr[nw].to[i]=tr[tr[nw].fail].to[i];
- }
- }
- il int power(ri x,ri y){ri ret=;while(y){if(y&)ret=ret*x%mod;x=x*x%mod;y>>=;}return ret;}
- int main()
- {
- n=read();m=read();rp(i,,n){scanf("%s",str+);insert(str);}bfs();
- as=power(,m);f[][]=;
- rp(i,,m-)
- rp(j,,nod_cnt)
- if(!tr[j].flg)
- rp(k,,)
- if(!tr[tr[j].to[k]].flg)f[i+][tr[j].to[k]]=(f[i+][tr[j].to[k]]+f[i][j])%mod;
- rp(i,,nod_cnt)as=(as+mod-f[m][i])%mod;
- printf("%d\n",as);
- return ;
- }
洛谷P4052 [JSOI2007]文本生成器 AC自动机+dp的更多相关文章
- [JSOI2007]文本生成器 --- AC自动机 + DP
[JSOI2007]文本生成器 题目描述: JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版. 该软件可以随机 ...
- BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3953 Solved: 1614[Submit][Stat ...
- 【bzoj1030】[JSOI2007]文本生成器 AC自动机+dp
题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是生成一篇长度固 ...
- 洛谷P4052 [JSOI2007]文本生成器(AC自动机)
传送门 好像这题的确只能用AC自动机做了……Aufun大佬太强啦 正着难我们反着做,用总共单词个数减去没有一个单词都不包含的 然后考虑怎么处理一个单词都不包含的,就是跑不到单词的结尾节点 定义$f[i ...
- [BZOJ1030] [JSOI2007] 文本生成器 (AC自动机 & dp)
Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...
- [BZOJ1030]:[JSOI2007]文本生成器(AC自动机+DP)
题目传送门 题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...
- BZOJ1030[JSOI2007]文本生成器——AC自动机+DP
题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是生成一篇长度固 ...
- 1030: [JSOI2007]文本生成器 ac自动机+dp
https://www.lydsy.com/JudgeOnline/problem.php?id=1030 求长度为m不包含n个子串的种数, 跑完ac自动机之后没办法跑矩阵快速幂,因为状态数比较大(6 ...
- [Bzoj1030][JSOI2007]文本生成器(AC自动机&dp)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1030 最最最常见的多串匹配问题!题目求至少包含一个子串的方案数,则可以转化成全部方案-不 ...
随机推荐
- Linux嵌入式时区修改
- 【原】在Matplotlib绘图中添加Latex风格公式
Matplotlib绘图的过程中,可以为各个轴的Label,图像的Title.Legend等元素添加Latex风格的公式. 只需要在Latex公式的文本前后各增加一个$符号,Matplotlib就可以 ...
- chrome调试手机webview中页面
http://blog.csdn.net/freshlover/article/details/42528643 注: 1. 可以调试真机上页面(USB连接)和虚拟机上页面 2. 手机系统需要4.4+ ...
- 《FPGA全程进阶---实战演练》第七章 让按键恢复平静
1基础理论部分 A:“怎么按键按下去之后,结果不正常?”,B:“按键你消抖了吗?”A:“消什么抖,还要消抖?”, B:“先检测按键变化,然后消抖过滤波动信号,最后输出稳定信号”,A:“我好像漏掉了什 ...
- DWZ使用中遇到的坑
DWZ官方文档中关于文件上传表单的提交: 因为Ajax不支持enctype="multipart/form-data" 所以用隐藏iframe来处理无刷新表单提交. <for ...
- 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 ...
- centos7目录统计之du命令
CentOS下du查看计算目录大小的命令 用法实例: [root@localhost local]# du -hs smgpdfd 3.3G smgpdfd [root@localhost lo ...
- Guava学习笔记(二):基础(Joiner,Objects,Splitter及Strings)
添加Maven依赖 JoinerTest import com.google.common.base.Joiner; import org.junit.Assert; import org.junit ...
- laravel 5 : Class 'input' not found
在配置文件中:config\app.php 加上 'Input' => Illuminate\Support\Facades\Input::class, 或者 引用 :use Illumina ...
- 设计模式-创建型模式,python享元模式 、python单例模式(7)
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. 享元模式尝 ...