题目

传送门:QWQ

分析

对着Trie图搞快速幂。

为什么这样是对的呢?

详见:http://www.matrix67.com/blog/archives/276

有些地方还不是很理解。。。。。。为什么节点还要往下扩展?

有空再来搞一搞

代码

 //#include <bits/stdc++.h>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn=, MOD=;
int son[maxn][], fail[maxn], end[maxn],q[maxn] , newp, flag[maxn];
char s[maxn];
struct Matrix{
ll m[maxn][maxn];
Matrix(){memset(m,,sizeof(m));}
};
Matrix operator*(const Matrix &mat1,const Matrix &mat2){
Matrix m;
for(int i=;i<=newp;i++)
for(int j=;j<=newp;j++)
for(int k=;k<=newp;k++){
m.m[i][j]=(m.m[i][j]+mat1.m[i][k]*mat2.m[k][j])%MOD;
}
return m;
}
int find(int cur,int i){
if(!cur) return ;
if(son[cur][i]) return son[cur][i];
return find(fail[cur],i);
}
int main(){
int n,L;
while(scanf("%d%d",&n,&L)==){
int l,r;
memset(son,,sizeof(son)); memset(fail,,sizeof(fail)); memset(end,,sizeof(end)); memset(q,,sizeof(q));
newp=;
for(int i=;i<=n;i++){
scanf("%s",s+);
int cur=,len=strlen(s+);
for(int j=;j<=len;j++){
if(!son[cur][s[j]-'A']) son[cur][s[j]-'A']=++newp;
cur=son[cur][s[j]-'A'];
}
end[cur]=i; flag[cur]=;
} Matrix ans,a;
for(q[l=r=]=;l<=r;l++){
for(int i=;i<;i++){
if(son[q[l]][i]){
fail[son[q[l]][i]]=find(fail[q[l]],i);
q[++r]=son[q[l]][i];
}
else son[q[l]][i]=find(fail[q[l]],i);
flag[son[q[l]][i]]|=flag[fail[son[q[l]][i]]];
}
} for(int i=;i<=newp;i++){
if(flag[i]) continue;
for(int j=;j<;j++){
int q=j+'A';
if(((q=='A'||q=='C'||q=='G'||q=='T'))&&flag[son[i][j]]==){
a.m[i][max(son[i][j],)]++; }
}
}
for(int i=;i<=newp;i++,puts(""))
for(int j=;j<=newp;j++){
printf("%lld ",a.m[i][j]);
}
for(int i=;i<=newp;i++) ans.m[i][i]=;
while(L){
if(L&) ans=ans*a;
a=a*a;
L>>=;
}
ll res=;
for(int i=;i<=newp;i++) res=(res+ans.m[][i])%MOD;
printf("%d\n",res);
}
}
/*
5 10
ACGE
CG
CCGG
ACG
TTAC
*/

【POJ】2778 DNA Sequence(AC自动机+矩阵快速幂)的更多相关文章

  1. poj 2778 DNA Sequence ac自动机+矩阵快速幂

    链接:http://poj.org/problem?id=2778 题意:给定不超过10串,每串长度不超过10的灾难基因:问在之后给定的长度不超过2e9的基因长度中不包含灾难基因的基因有多少中? DN ...

  2. POJ - 2778 ~ HDU - 2243 AC自动机+矩阵快速幂

    这两题属于AC自动机的第二种套路通过矩阵快速幂求方案数. 题意:给m个病毒字符串,问长度为n的DNA片段有多少种没有包含病毒串的. 根据AC自动机的tire图,我们可以获得一个可达矩阵. 关于这题的t ...

  3. POJ 2778 DNA Sequence (AC自动机,矩阵乘法)

    题意:给定n个不能出现的模式串,给定一个长度m,要求长度为m的合法串有多少种. 思路:用AC自动机,利用AC自动机上的节点做矩阵乘法. #include<iostream> #includ ...

  4. [poj2778]DNA Sequence(AC自动机+矩阵快速幂)

    题意:有m种DNA序列是有疾病的,问有多少种长度为n的DNA序列不包含任何一种有疾病的DNA序列.(仅含A,T,C,G四个字符) 解题关键:AC自动机,实际上就是一个状态转移图,注意能少取模就少取模, ...

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

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

  6. POJ 2778 DNA Sequence ( AC自动机、Trie图、矩阵快速幂、DP )

    题意 : 给出一些病毒串,问你由ATGC构成的长度为 n 且不包含这些病毒串的个数有多少个 分析 : 这题搞了我真特么久啊,首先你需要知道的前置技能包括 AC自动机.构建Trie图.矩阵快速幂,其中矩 ...

  7. POJ 2778 DNA Sequence (AC自动机+DP+矩阵)

    题意:给定一些串,然后让你构造出一个长度为 m 的串,并且不包含以上串,问你有多少个. 析:很明显,如果 m 小的话 ,直接可以用DP来解决,但是 m 太大了,我们可以认为是在AC自动机图中,根据离散 ...

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

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

  9. poj 2778 DNA Sequence AC自动机DP 矩阵优化

    DNA Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11860   Accepted: 4527 Des ...

  10. poj 2778 DNA Sequence AC自动机

    DNA Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11860   Accepted: 4527 Des ...

随机推荐

  1. codeforces 356 div2 C.Bear and Prime 100 数学

    C. Bear and Prime 100 time limit per test 1 second memory limit per test 256 megabytes input standar ...

  2. ssh 指定ssh端口号

    ssh -p higgs@192.168.43.1

  3. Java IO流-字符流

    2017-11-05 18:34:39 Java中的IO流按数据类型分类分为两种,一是字节流,二是字符流.字符流的出现是为了简化文本数据的读入和写出操作. 如果操作的文件是文本文件,那么使用字符流会大 ...

  4. npm安装vue详细教程(图片详解)

    npm安装vue详细教程(图片详解) 一.总结 一句话总结:整个安装流程照着教程来,注意系统环境变量的配置,注意一下npm的本地仓库和缓存位置 教程 系统环境变量 仓库 缓存 1.什么情况下最适合用n ...

  5. 一.UTF8字符集csv文件在oracle下乱码问题处理

    1.问题描述 在excel中生成了一个UTF-8编码格式的csv文件准备导入数据库,在notpad++下打开显示正常,编码集为UTF-8,通过pl/sql dev导入oracle是出现乱码,此时初步推 ...

  6. linux-mint下搭建android,angularjs,rails,html5开发环境

    目录[-] 必备软件: 环境配置: [open-jdk-6.0] [android-sdk] [ant] [github] [node.js] [rvm](ruby-1.9.3 rails-4.0.0 ...

  7. 伸展树的基本操作——以【NOI2004】郁闷的出纳员为例

    前两天老师讲了伸展树……虽然一个月以前自己就一直在看平衡树这一部分的书籍,也仔细地研读过伸展树地操作代码,但是就是没写过程序……(大概也是在平衡树的复杂操作和长代码面前望而生畏了)但是今天借着老师布置 ...

  8. 客户端链接Blog

    Word 2013链接Blog 1.设置共享->发布至博客->发布至博客 2.新建博客账户 3.添加新建账户信息 注意:URL内为Blog名,而非用户名 a) 在"Type of ...

  9. 函数响应式编程RxJava

    RxJava 到底是什么 一个词:异步. RxJava 在 GitHub 主页上的自我介绍是 "a library for composing asynchronous and event- ...

  10. window.onload 和 body.onload 相互覆盖的本质

    从根源上讲,window.onload和<body onload="alert('test');"> 所绑定的对象都是window ,body是没有onload事件的, ...