求不包含模式串的文本串个数,n极大。我们还是类似的建出ACAM,然后在上面跑dp,只不过这次我们要矩阵倍增来加速。复杂度O((m∗len)3logn)O((m*len)^3logn)

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
#define ll long long
#define N 110
#define inf 0x3f3f3f3f
#define mod 100000
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();return x*f;
}
char s[30];
int n=0,K,m,rt,son[N][4],fail[N],end[N],id[300],ans=0;
struct Matrix{int a[N][N];Matrix(){}Matrix(bool flag){memset(a,0,sizeof(a));if(flag) for(int i=1;i<=n;++i) a[i][i]=1;}friend Matrix operator*(Matrix a,Matrix b){Matrix res(0);for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)for(int k=1;k<=n;++k)res.a[i][j]=(res.a[i][j]+(ll)a.a[i][k]*b.a[k][j])%mod;return res;}friend Matrix operator^(Matrix a,int k){Matrix res(1);for(;k;k>>=1,a=a*a)if(k&1) res=res*a;return res;}
}a,b;
inline void ins(char *s){int len=strlen(s+1),p=rt;for(int i=1;i<=len;++i){int &y=son[p][id[s[i]]];if(!y) y=++n;p=y;}end[p]=1;
}
inline void buildAC(){queue<int>q;q.push(rt);while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<4;++i){int &y=son[x][i];if(!y){y=son[fail[x]][i];continue;}q.push(y);fail[y]=son[fail[x]][i];end[y]|=end[fail[y]];}}
}
int main(){
//  freopen("a.in","r",stdin);m=read();K=read();rt=++n;id['A']=0;id['T']=1;id['C']=2;id['G']=3;for(int i=0;i<4;++i) son[0][i]=rt;for(int i=1;i<=m;++i) scanf("%s",s+1),ins(s);buildAC();for(int i=1;i<=n;++i)for(int j=0;j<4;++j)if(!end[i]&&!end[son[i][j]]) a.a[i][son[i][j]]++;a=a^K;for(int i=1;i<=n;++i)if(!end[i]) ans=(ans+a.a[1][i])%mod;printf("%d\n",ans);return 0;
}

poj2778 DNA Sequence (ACAM+dp+矩阵倍增)相关推荐

  1. 【距离GDOI:128天】【POJ2778】DNA Sequence(AC自动机+矩阵加速)

    已经128天了?怎么觉得上次倒计时150天的日子还很近啊 ....好吧为了把AC自动机搞透我也是蛮拼的..把1030和这道题对比了无数遍...最终结论是...无视时间复杂度,1030可以用这种写法解. ...

  2. POJ 2778 DNA Sequence [AC自动机 + 矩阵快速幂]

    http://poj.org/problem?id=2778 题意:给一些只由ACGT组成的模式串,问有多少种长度为n且不含有给出的模式串的DNA序列. 自动机的状态转换可以看成一个有向图(有重边的) ...

  3. POJ - 2778 DNA Sequence(AC自动机+矩阵快速幂)

    题目链接:点击查看 题目大意:给出 n 个长度不大于 10 的字符串表示病毒串,再给出一个长度 len ,问长度为 len 的字符串中,有多少个字符串不含有病毒串作为子串 题目分析:因为病毒串的长度和 ...

  4. poj-2778 DNA Sequence

    题意: 给出n个AGCT组成的字符串和一个数m: 求AGCT能组成的长度为m的串的个数: n<=10,字符串长度<=10,m<=2x10^9: 题解: 构造一个满足题意的长度为x的串 ...

  5. poj2778DNA Sequence (AC自动机+矩阵快速幂)

    转载请注明出处: http://www.cnblogs.com/fraud/           --by fraud DNA Sequence Time Limit: 1000MS   Memory ...

  6. E - DNA Sequence POJ - 2778

    It's well known that DNA Sequence is a sequence only contains A, C, T and G, and it's very useful to ...

  7. 【POJ No. 2778】DNA 序列 DNA Sequence

    [POJ No. 2778]DNA 序列 DNA Sequence 北大OJ 题目地址 [题意] DNA序列是一个只包含A.C.T和G的序列.分析DNA序列片段非常有用,若动物的DNA序列包含片段AT ...

  8. Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】

    题意: 有b个blocks,每个blocks都有n个相同的0~9的数字,如果从第一个block选1,从第二个block选2,那么就构成12,问对于给定的n,b有多少种构成方案使最后模x的余数为k. 分 ...

  9. 【bzoj3329】Xorequ 数位dp+矩阵乘法

    题目描述 输入 第一行一个正整数,表示数据组数据 ,接下来T行 每行一个正整数N 输出 2*T行 第2*i-1行表示第i个数据中问题一的解, 第2*i行表示第i个数据中问题二的解, 样例输入 1 1 ...

最新文章

  1. 洛谷P4568 飞行路线 最短路k条免费
  2. 区块链课程笔记-第一课哈希算法在加密中的应用
  3. iOS 10、Xcode 8 遇到部分问题解决记录(包括控制台日志不输出)
  4. 二叉搜索树的第k个节点java_剑指Offer62:二叉搜索树的第k个结点(Java)
  5. JavaScript数据结构与算法——栈详解
  6. 高斯模糊为什么叫高斯滤波_为什么高斯是所有发行之王?
  7. 2000年考研英语阅读理解文章三
  8. 微软BI 之SSIS 系列 - 理解Data Flow Task 中的同步与异步, 阻塞,半阻塞和全阻塞以及Buffer 缓存概念...
  9. 计算机信息处理技术员初级难不难,考信息处理技术员之前,这些问题你要知道!...
  10. Python基础之文件操作
  11. 网站视频链接自动提取下载
  12. 鼠标失灵c语言代码,[转载]键盘和鼠标操作失灵代码
  13. Python3 - 补充知识点之HTML 、JavaScript、CSS (第五天)
  14. Chrome for Mac键盘快捷键!
  15. 文字图片在一行时候,图片居中问题
  16. 软件构造复习小结(2)——设计规约(Specification)
  17. 2022珠三角深圳国际半导体防静电材料展览会
  18. 三菱服务器有电源不显示,为什么打开电动车电源,仪表不显示?老师傅告诉你!...
  19. POI读写超大数据量Excel,解决超过几万行而导致内存溢出的问题(附源码)
  20. java字符串去掉中文_Java——去除字符串中的中文

热门文章

  1. Mastercam2022安装步骤图解(安装教程一看就会)
  2. 2013-3 阿里性能稳定性沙龙
  3. keil使用详解--魔法棒后续
  4. 【企业岗位需求决策--数据清洗】
  5. 人类的立体视觉与3D拍摄原理
  6. C语言查询成绩前三名的女生,如何查找每个班级总成绩前3名的学生?
  7. 监控/定位/诊断必杀技——JAVA应用生产问题
  8. Docker踩坑记录
  9. vue项目中实现登录拦截
  10. js中的indexOf方法和lastIndexOf方法