题目

传送门: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. render:h => h(App) 是什么意思?

    在学习vue.js时,使用vue-cli创建了一个vue项目,main.js文件中有一行代码不知道什么意思.在网上搜索得到如下解答: 参考一:https://www.cnblogs.com/longy ...

  2. 解决"No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android"错误

    今天安装了Android Studio 3.2,打开一个旧工程,编译提示"No toolchains found in the NDK toolchains folder for ABI w ...

  3. Spring中<bean>标签之使用p标签配置bean的属性

    在spring的bean配置文件中我们常可以见到下面的例子: <bean id="user" class="com.sys.User" p:name-re ...

  4. markdown哈哈

    function box(){ 世界你好 }

  5. Kolakoski数列

    2018-04-16 15:40:16 Kolakoski序列是一个仅由1和2组成的无限数列,是一种通过“自描述”来定义的数列.他在整数数列大全网站上排名第二位,足见该数列在组合数学界中的重要性. K ...

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

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

  7. JDK环境变化配置

    JDK环境变化配置 第一"JAVA_HOME" JAVA_HOME的内容是jdk安装目录.如小编安装的位置:D: \Java\jdk1.7.0_60,并且后边不带分号 第二, CL ...

  8. c#LINQ表达树

    如果你已经用过LINQ, 你应该知道函数方式,以及包含的丰富的类库, 如果你仍不了解, 那根据下面的链接去熟悉一下 the LINQ tutorial,  lambda. 表达树提供了丰富的包含参数的 ...

  9. https ddos攻击——由于有了认证和加解密 后果更严重 看绿盟的产品目前对于https的ddos cc攻击需要基于内容做检测

    如果web服务器支持HTTPS,那么进行HTTPS洪水攻击是更为有效的一种攻击方式,一方面,在进行HTTPS通信时,web服务器需要消耗更多的资源用来进行认证和加解密,另一方面,一部分的防护设备无法对 ...

  10. C primer plus 5 读书笔记2

    1..字符串的输入:scanf()在读入时,当遇到空白字符空格blank.制表符tab.换行符newline时停止读取.一般使用gets(),来输入字符串. 2.strlen(),一字符为单位输出输出 ...