博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj-1030: [JSOI2007]文本生成器(ac自动机+dp)
阅读量:4701 次
发布时间:2019-06-09

本文共 1677 字,大约阅读时间需要 5 分钟。

好像是入门题的说

跑生成的串中不带给定字符串的个数ans   26^m-ans就是答案

dp[i][j]表示字符第i位在ac自动机上第j的节点的合法情况数

如果转移到的下一个节点是字符的结尾,就是非法的

转移dp[i][j]+=dp[i-1][j];

ps 节点编号从1开始

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f#define mem(a,b) memset(a,b,sizeof(a))#define ll long long#define sd(x) scanf("%d",&(x))#define sl(x) scanf("%lld",&(x))#define scs(s) scanf("%s",s)#define rep(i,a,b) for(int i=a;i<=b;i++)#define per(i,a,b) for(int i=a;i>=b;i--)#define lowbit(x) x&(-x)using namespace std;const int maxn=1e5+10;const int mod=10007;int dp[105][6005];int mub=1;int tree[maxn][26],cnt[maxn];int fail[maxn],End[maxn][26];char s[maxn];void Insert(){ int root=1; int l=strlen(s); rep(i,0,l-1) { int now=s[i]-'A'; if(!tree[root][now]) tree[root][now]=++mub; root=tree[root][now]; } cnt[root]++;}void getfail(){ for(int i=1;i<=mub;i++) fail[i]=1; queue
q;fail[1]=0; q.push(1); while(!q.empty()) { int now=q.front(); q.pop(); rep(i,0,25) { int k=fail[now]; if(tree[now][i]) { q.push(tree[now][i]); fail[tree[now][i]]=k?tree[fail[now]][i]:1; cnt[tree[now][i]]|=cnt[fail[tree[now][i]]]; } else tree[now][i]=k?tree[fail[now]][i]:1; } }}void DP(int x){ rep(i,1,mub) { rep(j,0,25) { if(cnt[tree[i][j]]) continue; dp[x][tree[i][j]]+=dp[x-1][i]; dp[x][tree[i][j]]%=mod; } }}int main(){ int n,m,ans=1,tot=0; sd(n),sd(m); rep(i,1,n) scs(s),Insert(); getfail();dp[0][1]=1; rep(i,1,m) DP(i),ans=(ans*26)%mod; rep(i,1,mub) tot=(tot+dp[m][i])%mod; printf("%d\n",((ans-tot)%mod+mod)%mod); return 0;}

 

转载于:https://www.cnblogs.com/minun/p/11293960.html

你可能感兴趣的文章
Partial Tree UVALive - 7190(完全背包)
查看>>
『深度应用』NLP机器翻译深度学习实战课程·零(基础概念)
查看>>
『开发技术』Windows极简安装使用face_recognition实现人脸识别
查看>>
『深度应用』NLP命名实体识别(NER)开源实战教程
查看>>
『开发技术』GPU训练加速原理(附KerasGPU训练技巧)
查看>>
『深度应用』NLP机器翻译深度学习实战课程·壹(RNN base)
查看>>
『深度应用』一小时教你上手MaskRCNN·Keras开源实战(Windows&Linux)
查看>>
『王霸之路』从0.1到2.0一文看尽TensorFlow奋斗史
查看>>
系统测试中需要注意的点
查看>>
Elasticsearch TermQuery 详解
查看>>
一个困扰了我N久的bug , android.enableAapt2=false 无效
查看>>
查看客户端的IP地址,机器名,MAC地址,登陆名等信息
查看>>
移动端经常遇到的小bug
查看>>
网络&热恋NSURLConnection代理及GET¥POST请求
查看>>
SshTerminal
查看>>
MySQL常用函数
查看>>
Ubuntu安装搜狗拼音教程
查看>>
Happy Number
查看>>
Sqlserver 系统视图简单说明
查看>>
【摘录】PHP异步调用实现方式
查看>>