题目

传送门: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. python 浮点数转分数

    from fractions import Fraction value = 4.2 print(Fraction(value).limit_denominator())

  2. [sql]java.sql.Types的具体对应值(jdbcType)

    public final static int BIT   =  -7; public final static int TINYINT  =  -6; public final static int ...

  3. 浅谈Android Studio3.0更新之路(遇坑必入)

    >可以参考官网设置-> 1 2 >> Fantasy_Lin_网友评论原文地址是:简书24K纯帅豆写的我也更新一下出处[删除]Fa 转自脚本之家 浅谈Android Studi ...

  4. Eclipse 常用快捷键和使用技巧

    1.查看快捷键定义的地方 Window->Preferences->General->Keys. 2.更改启动页 在AndroidManifest.xml第一个activity标签项 ...

  5. poj3436网络流之最大流拆点

    这题看了半天看不懂题意...还是看的网上题意写的 加一个源点一个汇点,把每个点拆成两个,这两个点的流量是v,其他联通的边都设为无穷大 输入没有1的点就与源点连接,输出只有1的点就与汇点连接 还有这个输 ...

  6. LINUX QQ

    查询龙井QQ http://www.longene.org/forum/viewtopic.php?f=6&t=4700

  7. vue.js利用vue.router创建前端路由

    node.js方式: 利用node.js安装vue-router模块 cnpm install vue-router 安装完成后我们引入这个模板! 下载vue-router利用script引入方式: ...

  8. sgu 137. Funny Strings 线性同余,数论,构造 难度:3

    137. Funny Strings time limit per test: 0.25 sec. memory limit per test: 4096 KB Let's consider a st ...

  9. New Concept English Two 3

    $课文5 无错号之虞 47. Mr.James Scott has a garage in Silbury and now he has just bought another garage in P ...

  10. Linux 网络编程->epoll<-LT/ET模式整理(~相逢何必曾相识~)

    今天自己整理一下epoll,网上有很多经典的介绍,看了很多~收藏了很多~还是整理一下做个积累, 自己的东西好找~ 1. epoll 模型简介 epoll 是Linux I/O 多路复用接口 selec ...