1030: [JSOI2007]文本生成器 ac自动机+dp
https://www.lydsy.com/JudgeOnline/problem.php?id=1030
求长度为m不包含n个子串的种数,
跑完ac自动机之后没办法跑矩阵快速幂,因为状态数比较大(6000),所以dp转移,dp[i][j]表示前i个跑到j状态的不包含子串的情况数
//#pragma comment(linker, "/stack:200000000") //#pragma GCC optimize("Ofast,no-stack-protector") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") //#pragma GCC optimize("unroll-loops") #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pi acos(-1.0) #define ll long long #define vi vector<int> //#define mod 1000000007 #define C 0.5772156649 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 #define pil pair<int,ll> #define pli pair<ll,int> #define pii pair<int,int> #define cd complex<double> #define ull unsigned long long #define base 1000000000000000000 #define fio ios::sync_with_stdio(false);cin.tie(0)using namespace std;const double g=10.0,eps=1e-12; const int N=6000+10,maxn=200000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;ll n,m,dp[110][N]; ll quick(ll a,ll b,ll c) {ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c;b>>=1;}return ans; } char s[N]; struct ACM{int root,tot;int Next[N][30],fail[N],End[N];int newnode(){memset(Next[tot],-1,sizeof Next[tot]);End[tot]=0;return tot++;}ACM(){tot=0;root=newnode();}void ins(){int now=root,len=strlen(s);for(int i=0;i<len;i++){if(Next[now][s[i]-'A']==-1)Next[now][s[i]-'A']=newnode();now=Next[now][s[i]-'A'];}End[now]=1;}void build(){queue<int>q;fail[root]=root;for(int i=0;i<26;i++){if(Next[root][i]==-1)Next[root][i]=root;else{fail[Next[root][i]]=root;q.push(Next[root][i]);}}while(!q.empty()){int now=q.front();q.pop();if(End[fail[now]])End[now]=1;for(int i=0;i<26;i++){if(Next[now][i]==-1)Next[now][i]=Next[fail[now]][i];else{fail[Next[now][i]]=Next[fail[now]][i];q.push(Next[now][i]);}}}}void solve(){dp[0][0]=1;for(int i=1;i<=m;i++){for(int j=0;j<tot;j++){if(!End[j]&&dp[i-1][j]){for(int k=0;k<26;k++){int now=j;while(Next[now][k]==-1)now=fail[now];dp[i][Next[now][k]]=(dp[i][Next[now][k]]+dp[i-1][j])%10007;}}}}ll ans=quick(26,m,10007);for(int i=0;i<tot;i++)if(!End[i])ans=((ans-dp[m][i])%10007+10007)%10007;printf("%lld\n",ans);} }ac; int main() {scanf("%lld%lld",&n,&m);for(int i=0;i<n;i++){scanf("%s",s);ac.ins();}ac.build();ac.solve();return 0; } /**********************************************/
View Code
转载于:https://www.cnblogs.com/acjiumeng/p/8964376.html
1030: [JSOI2007]文本生成器 ac自动机+dp相关推荐
- BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3953 Solved: 1614 [Submit][St ...
- [BZOJ1030]:[JSOI2007]文本生成器(AC自动机+DP)
题目传送门 题目描述: JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机 ...
- [BZOJ1030] [JSOI2007] 文本生成器 (AC自动机 dp)
Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机 ...
- bzoj 1030: [JSOI2007]文本生成器(AC自动机+DP)
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 5187 Solved: 2136 [Submit][St ...
- bzoj1030 [JSOI2007] 文本生成器(ACAM+dp)
求长度为m的,至少包含一个模式串的文本串个数. 我们考虑用所有的个数26m26^m减去一个模式串也不包含的个数. 后者我们可以建出ACAM,然后在ACAM上跑dp即可. #include <cs ...
- [BZOJ1030] [JSOI2007]文本生成器
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MB Description JSOI交给队员ZYX一个任务,编制一个称之为&qu ...
- [BZOJ1030][JSOI2007]文本生成器
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 5025 Solved: 2080 [Submit][St ...
- HDU 2296 Ring AC自动机 + DP
题意:给你n个模式串,每个模式串有一个得分,让你构造出一个长度为N之内且分数最高的文本串;输出字典序列最小的. 解题思路: AC自动机 + DP , 不过要输出字典序列最小,多开一个 一个三维字符串 ...
- uvalive4842(AC自动机+DP)
题意: 给出猴子打字时打某个字母的概率,猴子最多可以敲键盘m次,问得到的长度是m的单词包含模式串的概率. 思路: AC自动机+dp. 首先,我们用模式串构造一个AC自动机,用dp[i]][j]表示当前 ...
最新文章
- App.Config 和 WebConfig 特殊字符的转义码对应关系
- Selenium测试专项三班隆重开班
- 暴力解决:InvocationException: GraphViz‘s executables not found
- 【数据结构与算法】之深入解析“验证IP地址”的求解思路与算法示例
- hdu1372 Knight Moves BFS 搜索
- VS中添加第三方库及相对路径设置
- SAP UI5 应用开发教程之八 - 多语言的支持
- NSMapTable
- 技术干货丨隐私保护下的迁移算法
- TensorFlow相关工具
- 周鸿祎,会是下一个“贾跃亭”吗?
- 我国常用的微型计算机是,2013云南省全国计算机等级考试二级笔试试卷VB理论考试试题及答案...
- 网友神总结:我们继续用 XP 的十大理由
- CF1041E Tree Reconstruction
- 从完美KL距离推导VAE
- Python 贪吃蛇小游戏
- jieba对word文档词频分析
- ubuntu安装nividia驱动
- java无法验证证书_如何解决“证书无效,不能用于验证本网站的身份”错误?...
- python arp协议分析_通过python对本局域网进行ARP扫描获取MAC
热门文章
- php url传递 加号,坑爹的URL编码-PHP正确处理URL中的加号(+)
- 7月21日王者服务器维修,2020年7月21日王者荣耀世冠杯,GOG2:0EMC,实力碾压运营滴水不漏...
- linux内核文件恢复,linux下系统文件恢复
- c++ const
- 湖北工业大学查分_湖北工业大学成人高考低于分数线没考上怎么办?
- 走火入魔的 C/C++ 如何通过编译器预定义的宏值来区分 target OS 是 Windows 还是 Linux...
- java酒店管理系统_酒店管理系统
- wps一直显示正在备份怎么办_做了一天的文档被误删?WPS这个功能随时准备帮你兜底...
- Go获取命令行参数及信号量处理
- dreamweaver cs6配置phonegap环境