【POJ2778】DNA Sequence(AC自动机,DP)
题意:
生物课上我们学到,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)的更多相关文章
- poj 2778 DNA Sequence AC自动机DP 矩阵优化
DNA Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11860 Accepted: 4527 Des ...
- [poj2778]DNA Sequence(AC自动机+矩阵快速幂)
题意:有m种DNA序列是有疾病的,问有多少种长度为n的DNA序列不包含任何一种有疾病的DNA序列.(仅含A,T,C,G四个字符) 解题关键:AC自动机,实际上就是一个状态转移图,注意能少取模就少取模, ...
- 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 ...
- POJ2778 DNA Sequence(AC自动机 矩阵)
先使用AC自动机求得状态转移关系,再建立矩阵,mat[i][j]表示一步可从i到j且i,j节点均非终止字符的方案数,则此矩阵的n次方表示n步从i,到j的方法数. #include<cstdio& ...
- [poj2778 DNA Sequence]AC自动机,矩阵快速幂
题意:给一些字符串的集合S和整数n,求满足 长度为n 只含charset = {'A'.'T‘.'G'.'C'}包含的字符 不包含S中任一字符串 的字符串的种类数. 思路:首先对S建立ac自动机,考虑 ...
- POJ 2778 DNA Sequence (AC自动机+DP+矩阵)
题意:给定一些串,然后让你构造出一个长度为 m 的串,并且不包含以上串,问你有多少个. 析:很明显,如果 m 小的话 ,直接可以用DP来解决,但是 m 太大了,我们可以认为是在AC自动机图中,根据离散 ...
- POJ2278 DNA Sequence —— AC自动机 + 矩阵优化
题目链接:https://vjudge.net/problem/POJ-2778 DNA Sequence Time Limit: 1000MS Memory Limit: 65536K Tota ...
- POJ 2778 DNA Sequence ( AC自动机、Trie图、矩阵快速幂、DP )
题意 : 给出一些病毒串,问你由ATGC构成的长度为 n 且不包含这些病毒串的个数有多少个 分析 : 这题搞了我真特么久啊,首先你需要知道的前置技能包括 AC自动机.构建Trie图.矩阵快速幂,其中矩 ...
- 【距离GDOI:128天】【POJ2778】DNA Sequence(AC自动机+矩阵加速)
已经128天了?怎么觉得上次倒计时150天的日子还很近啊 ....好吧为了把AC自动机搞透我也是蛮拼的..把1030和这道题对比了无数遍...最终结论是...无视时间复杂度,1030可以用这种写法解. ...
- POJ 3691 DNA repair(AC自动机+DP)
题目链接 能AC还是很开心的...此题没有POJ2778那么难,那个题还需要矩阵乘法,两个题有点相似的. 做题之前,把2778代码重新看了一下,回忆一下当时做题的思路,回忆AC自动机是干嘛的... 状 ...
随机推荐
- chadang saidui
http://www.freehacktools.com/ wen http://www.hackyshacky.com/2013/02/Must-have-hacking-tools.html ...
- C连接MySQL数据库开发之Windows环境配置及测试(转)
http://blog.csdn.net/xyang81/article/details/26814633(转)
- 关于python中文件导入的若干问题
__init__文件 同一级目录下直接import导入就可以了,如果是在不同的目录下面被导入文件的文件夹下面必须有__init__.py文件,即使这个文件是空的也可以.当然这个文件也可以初始一些数据 ...
- Java应用程序访问网络资源--HttpClient
HttpClient的最本质的功能是执行HTTP方法.一个HTTP方法的执行涉及到一个或几个HTTP请求/ HTTP响应的交流,通常由HttpClient的内部处理.用户预计将提供一个请求对象来执行和 ...
- SpingMVC ModelAndView, Model,Control以及参数传递
1.web.xml 配置: <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class& ...
- clientTop、offsetTop和scrollTop的区分
页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offse ...
- 解决在CentOS6.5下安装OpenStack(Icehouse版本 )出现的glance服务无法正常工作的问题
最近一直在用Juno版本,因为项目需要,今天在虚拟机里安装了Icehouse版,其中glance组件在执行安装的过程后,出现启动失败的现象,幸好以前排查过此类错误,遂记录如下: 在官方文档(Iceho ...
- Thinkphp源码分析系列(四)–Dispatcher类
下面我们来分析一下Thinkphp中的url解析和路由调度类.此类主要功能是 // +--------------------------------------------------------- ...
- jms的俩种模式
package com.jiangchong.job; import java.util.Date; import javax.jms.Connection; import javax.jms.Con ...
- Java中serialVersionUID
报错信息如下: Adds a default serial version ID to the selected type. Use this option to add a user-defined ...