题意:

生物课上我们学到,DNA序列中只有A, C, T和G四种片段。

经科学发现,DNA序列中,包含某些片段会产生不好的基因,如片段”ATC”是不好片段,则”AGATCC”, “CATCAA”, “ATCATC”都是不好的DNA序列,这些不好片段我们可以称为病毒片段

现在已知m个病毒片段, 问长度为n的DNA序列,有多少种可能不包含病毒片段。答案可能很大,取模 100000。

【数据规模和约定】

0<=m<=10  病毒片段长度不超过10,只含A,T,C,G字母

1<=n<=2000000000

思路:AC自动机

因为fail[i]一定是i的一个前缀的后缀,fail[i]如果带病毒i必定带病毒

转移:

 {
    dp[0,1]:=1;
  for i:=1 to m do
  for eachedge(i,j)
  begin
   dp[i,j]:=dp[i,j]+dp[i-1,i];
  end;              }
用矩阵乘法优化
 const mo=;
type arr=array[..,..]of int64;
var y,c,ans,d:arr;
s:array[..]of char;
map:array[..,'A'..'Z']of longint;
f,b,q:array[..]of longint;
m,n,i,j,k,t,sum,num:longint;
ch:string; procedure build;
var i,k,d:longint;
begin
k:=; d:=length(ch);
for i:= to d do
begin
if map[k,ch[i]]= then begin inc(num); map[k,ch[i]]:=num; end;
k:=map[k,ch[i]];
end;
b[k]:=;
end; procedure acauto;
var t,w,i,u,p,son:longint;
begin
t:=; w:=; q[]:=;
while t<w do
begin
inc(t); u:=q[t];
for i:= to do
if map[u,s[i]]> then
begin
son:=map[u,s[i]];
p:=f[u];
if u= then f[son]:=
else f[son]:=map[p,s[i]];
inc(w); q[w]:=son;
end
else
begin
p:=f[u];
if u= then map[u,s[i]]:=
else map[u,s[i]]:=map[p,s[i]];
end;
end;
end; begin
assign(input,'poj2778.in'); reset(input);
assign(output,'poj2778.out'); rewrite(output);
readln(m,n);
num:=;
s[]:='A'; s[]:='C'; s[]:='G'; s[]:='T';
for i:= to m do
begin
readln(ch);
build;
end;
acauto;
for i:= to num do
if b[f[i]]= then b[i]:=; for i:= to num do
if b[i]= then
for j:= to do
if b[map[i,s[j]]]= then inc(d[i,map[i,s[j]]]); t:=n;
for i:= to num do ans[i,i]:=;
y:=d;
while t> do
begin
if t and = then
begin
for i:= to num do
for j:= to num do c[i,j]:=;
for i:= to num do
for k:= to num do
begin
for j:= to num do c[i,k]:=c[i,k]+ans[i,j]*y[j,k];
c[i,k]:=c[i,k] mod mo;
end;
for i:= to num do
for j:= to num do ans[i,j]:=c[i,j];
end;
for i:= to num do
for j:= to num do c[i,j]:=;
for i:= to num do
for k:= to num do
begin
for j:= to num do c[i,k]:=c[i,k]+y[i,j]*y[j,k];
c[i,k]:=c[i,k] mod mo;
end;
for i:= to num do
for j:= to num do y[i,j]:=c[i,j];
t:=t>>;
end;
for i:= to num do sum:=(sum+ans[,i]) mod mo;
writeln(sum); close(input);
close(output);
end.

【POJ2778】DNA Sequence(AC自动机,DP)的更多相关文章

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

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

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

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

  3. 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 ...

  4. POJ2778 DNA Sequence(AC自动机 矩阵)

    先使用AC自动机求得状态转移关系,再建立矩阵,mat[i][j]表示一步可从i到j且i,j节点均非终止字符的方案数,则此矩阵的n次方表示n步从i,到j的方法数. #include<cstdio& ...

  5. [poj2778 DNA Sequence]AC自动机,矩阵快速幂

    题意:给一些字符串的集合S和整数n,求满足 长度为n 只含charset = {'A'.'T‘.'G'.'C'}包含的字符 不包含S中任一字符串 的字符串的种类数. 思路:首先对S建立ac自动机,考虑 ...

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

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

  7. POJ2278 DNA Sequence —— AC自动机 + 矩阵优化

    题目链接:https://vjudge.net/problem/POJ-2778 DNA Sequence Time Limit: 1000MS   Memory Limit: 65536K Tota ...

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

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

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

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

  10. POJ 3691 DNA repair(AC自动机+DP)

    题目链接 能AC还是很开心的...此题没有POJ2778那么难,那个题还需要矩阵乘法,两个题有点相似的. 做题之前,把2778代码重新看了一下,回忆一下当时做题的思路,回忆AC自动机是干嘛的... 状 ...

随机推荐

  1. Combobox

    1.方式一 <select id="cc" class="easyui-combobox" name="dept" style=&qu ...

  2. Java cookie和session介绍与区别

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...

  3. 视频演示eworkflow集成定制aspx页面的过程

    eworkflow自定义工作流系统,集成eform自定义表单,可以做到在线编辑流程,在线编辑表单.eform也提供在线建立业务表,维护表字段等,所以通过eworkflow+eform可以在线完成业务流 ...

  4. xcode 插件地址

    http://finalshares.com/read-1104 curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/de ...

  5. NSURLConnection使用

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  6. Java导出Word利用freemarker(含图片)

    制作Word模版 建议使用高版本的office做,尽量不要用WPS做,生成xml会出现乱码 编码要统一,推荐UTF-8 建好模板,将模板另存为xml格式,建议原来模板不要删,xml的如果后期打不开,还 ...

  7. Java温故系列之web项目复习

    如果从外面导入项目 操作方法为: File->Import -->General-->Existing Project into Workspace 搭建sqlserver数据库连接 ...

  8. subline text3 删除行 快捷键设置

    打开 首选项-->按键绑定 { "keys": ["ctrl+shift+k"], "command": "run_macr ...

  9. arcgis如何制作DEM数据

    DEM描述的是地面高程信息,它在测绘.水文.气象.地貌.地质.土壤.工程建设.通讯.军事等国民经济和国防建设以及人文和自然科学领域有着广泛的应用.如在工程建设上,可用于如土方量计算.通视分析等:在防洪 ...

  10. 通过Fiddler修改包

    1.修改Request 命令行键入: bpu URL 优缺点:对单个URL打断点.不影响其他接口. 用途:可以修改客户端对服务器发送的请求,通过修改成不同的参数,验证服务器响应是否正确.通常用于模拟客 ...