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相关推荐

  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. bzoj 1030: [JSOI2007]文本生成器(AC自动机+DP)

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

  5. bzoj1030 [JSOI2007] 文本生成器(ACAM+dp)

    求长度为m的,至少包含一个模式串的文本串个数. 我们考虑用所有的个数26m26^m减去一个模式串也不包含的个数. 后者我们可以建出ACAM,然后在ACAM上跑dp即可. #include <cs ...

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

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

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

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

  8. HDU 2296 Ring AC自动机 + DP

    题意:给你n个模式串,每个模式串有一个得分,让你构造出一个长度为N之内且分数最高的文本串;输出字典序列最小的. 解题思路:  AC自动机 + DP , 不过要输出字典序列最小,多开一个 一个三维字符串 ...

  9. uvalive4842(AC自动机+DP)

    题意: 给出猴子打字时打某个字母的概率,猴子最多可以敲键盘m次,问得到的长度是m的单词包含模式串的概率. 思路: AC自动机+dp. 首先,我们用模式串构造一个AC自动机,用dp[i]][j]表示当前 ...

最新文章

  1. App.Config 和 WebConfig 特殊字符的转义码对应关系
  2. Selenium测试专项三班隆重开班
  3. 暴力解决:InvocationException: GraphViz‘s executables not found
  4. 【数据结构与算法】之深入解析“验证IP地址”的求解思路与算法示例
  5. hdu1372 Knight Moves BFS 搜索
  6. VS中添加第三方库及相对路径设置
  7. SAP UI5 应用开发教程之八 - 多语言的支持
  8. NSMapTable
  9. 技术干货丨隐私保护下的迁移算法
  10. TensorFlow相关工具
  11. 周鸿祎,会是下一个“贾跃亭”吗?
  12. 我国常用的微型计算机是,2013云南省全国计算机等级考试二级笔试试卷VB理论考试试题及答案...
  13. 网友神总结:我们继续用 XP 的十大理由
  14. CF1041E Tree Reconstruction
  15. 从完美KL距离推导VAE
  16. Python 贪吃蛇小游戏
  17. jieba对word文档词频分析
  18. ubuntu安装nividia驱动
  19. java无法验证证书_如何解决“证书无效,不能用于验证本网站的身份”错误?...
  20. python arp协议分析_通过python对本局域网进行ARP扫描获取MAC

热门文章

  1. php url传递 加号,坑爹的URL编码-PHP正确处理URL中的加号(+)
  2. 7月21日王者服务器维修,2020年7月21日王者荣耀世冠杯,GOG2:0EMC,实力碾压运营滴水不漏...
  3. linux内核文件恢复,linux下系统文件恢复
  4. c++ const
  5. 湖北工业大学查分_湖北工业大学成人高考低于分数线没考上怎么办?
  6. 走火入魔的 C/C++ 如何通过编译器预定义的宏值来区分 target OS 是 Windows 还是 Linux...
  7. java酒店管理系统_酒店管理系统
  8. wps一直显示正在备份怎么办_做了一天的文档被误删?WPS这个功能随时准备帮你兜底...
  9. Go获取命令行参数及信号量处理
  10. dreamweaver cs6配置phonegap环境