亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

[題解]POJ2778 DNA Sequence

2019-11-06 05:26:40
字體:
來源:轉載
供稿:網友

Description

It’s well known that DNA Sequence is a sequence only contains A, C, T and G, and it’s very useful to analyze a segment of DNA Sequence,For example, if a animal’s DNA sequence contains segment ATC then it may mean that the animal may have a genetic disease. Until now scientists have found several those segments, the PRoblem is how many kinds of DNA sequences of a species don’t contain those segments.

Suppose that DNA sequences of a species is a sequence that consist of A, C, T and G,and the length of sequences is a given integer n.

Input

First line contains two integer m (0 <= m <= 10), n (1 <= n <=2000000000). Here, m is the number of genetic disease segment, and n is the length of sequences.

Next m lines each line contain a DNA genetic disease segment, and length of these segments is not larger than 10.

Output

An integer, the number of DNA sequences, mod 100000.

Sample Input

4 3 AT AC AG AA

Sample Output

36

Solution

題目大意:給定m個字符串和一個長度n,求不包含這m個字符串的長度為n的字符串個數mod 100000的值,字符串中只含’A’、’C’、’T’、’G’。 做法: 首先構造一下AC自動機我們就會發現,題目要求的就是在AC自動機上跑n次同時不經過任何一個表示字符串的點的方案總數。仔細想一想會發現,有兩種點不合法:一是直接表示字符串的點,二是fail邊連向表示字符串的點的點。所以我們就可以DP,在構造AC自動機的時候給不合法的點打上標記。用fi,j表示跑了i次到達j節點的合法路徑總數,dp如下:

f[0][1]=1; //初始化for(int i=1;i<=n;i++){ //n為輸入的字符串長度 for(int j=1;j<=num;j++){ //num為AC自動機中節點總數,1節點是根 if(!T[j].flag&&f[i-1][j]){ //如果該節點合法并且當前點的答案不為0(如果當前節點答案為0就沒必要更新了,更新等于沒更新) for(int k=1;k<=4;k++){ //枚舉4種字母 int p=j; while(!T[p].next[k])p=T[p].fail; //如果不匹配就沿著失配邊走(為了防止死循環,已經提早把T[0].next全部賦為1) (f[i][T[p].next[k]]+=f[i-1][j])%=mod; //更新其他點的答案 } } }}

但是這樣肯定不行,n有2?109,所以我們可以用矩陣乘法優化當前DP。矩陣還是容易推的,實在不懂看看代碼就行了。 代碼:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int maxn=110,mod=100000;struct node{ int next[5],fail,flag;}T[maxn];struct matrix{ LL a[maxn][maxn]; int l,r; matrix(){memset(a,0,sizeof a);}}temp,c,I;int n,m,num=1,que[maxn],ans,head,tail,Hash[256];char ch[12];void Insert(char *s){ int p=1,len=strlen(s); for(int i=0;i<len;i++){ if(!T[p].next[Hash[s[i]]])T[p].next[Hash[s[i]]]=++num; p=T[p].next[Hash[s[i]]]; } T[p].flag=true;}void Bfs(){ //構造AC自動機的fail邊,順便標記不合法節點 memset(que,head=tail=0,sizeof que); que[++tail]=1; while(head<tail){ int x=que[++head]; for(int i=1;i<=4;i++){ if(T[x].next[i]){ int p=T[x].fail; while(!T[p].next[i])p=T[p].fail; T[T[x].next[i]].fail=T[p].next[i]; if(T[T[p].next[i]].flag)T[T[x].next[i]].flag=true; que[++tail]=T[x].next[i]; } } }}matrix mul(matrix x,matrix y){ matrix re; re.l=x.l;re.r=y.r; for(int i=1;i<=re.l;i++){ for(int j=1;j<=re.r;j++){ for(int k=1;k<=x.r;k++){ (re.a[i][j]+=x.a[i][k]*y.a[k][j])%=mod; } } } return re;}matrix pow(matrix x,int y){ matrix re=I; while(y){ if(y&1)re=mul(re,x); x=mul(x,x);y>>=1; } return re;}int main(){ Hash['A']=1;Hash['C']=2;Hash['T']=3;Hash['G']=4; for(int i=1;i<=4;i++)T[0].next[i]=1; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("/n%s",ch); Insert(ch); } Bfs();temp.l=1;c.l=c.r=I.l=I.r=temp.r=num; for(int i=1;i<=num;i++)I.a[i][i]=1; for(int i=1;i<=num;i++){ //轉移矩陣 if(T[i].flag)continue; for(int j=1;j<=4;j++){ int p=i; while(!T[p].next[j])p=T[p].fail; c.a[i][T[p].next[j]]++; } } temp.a[1][1]=1; temp=mul(temp,pow(c,m)); for(int i=1;i<=num;i++){ //統計答案 if(!T[i].flag){ (ans+=temp.a[1][i])%=mod; } } printf("%d/n",ans); return 0;}
上一篇:Scala求和例子

下一篇:leetcode-Happy Number

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91在线播放国产| 在线观看亚洲区| 欧美高清第一页| 欧美一区亚洲一区| 亚洲色图综合久久| 日韩一区二区福利| 欧美成人激情在线| 欧美久久精品一级黑人c片| 亚洲美女久久久| 久久久亚洲网站| 欧美日韩在线观看视频小说| 91黑丝高跟在线| 国产日韩欧美在线观看| 97香蕉超级碰碰久久免费的优势| 国产精品日日摸夜夜添夜夜av| 欧美极品少妇xxxxⅹ免费视频| 国产日韩欧美在线播放| 亚洲精品影视在线观看| 亚洲999一在线观看www| 日韩精品中文字| 欧美激情在线有限公司| 欧美激情国内偷拍| 欧美性猛交xxxxx水多| 久久人人爽国产| 国产精品亚洲自拍| 色诱女教师一区二区三区| 欧美激情中文字幕乱码免费| 一道本无吗dⅴd在线播放一区| 日韩女优人人人人射在线视频| 日韩va亚洲va欧洲va国产| 欧美高清视频在线播放| 日韩**中文字幕毛片| 国产日韩欧美在线观看| 欧美性猛交99久久久久99按摩| 尤物九九久久国产精品的特点| yellow中文字幕久久| 欧美极品在线播放| 亚洲男人av电影| 国产精品电影在线观看| 亚洲va久久久噜噜噜| 欧美精品第一页在线播放| 尤物精品国产第一福利三区| 国产精品偷伦一区二区| 国产精品夫妻激情| 清纯唯美日韩制服另类| 国产成人一区二区三区小说| 色爱精品视频一区| 亚洲人成电影在线观看天堂色| 琪琪亚洲精品午夜在线| 成人性生交大片免费看视频直播| 韩国19禁主播vip福利视频| 一区二区三区视频观看| 一个色综合导航| 欧美华人在线视频| 日韩av在线一区| 欧美另类xxx| 日韩中文字幕免费| 国产亚洲aⅴaaaaaa毛片| 97国产精品人人爽人人做| xxxxxxxxx欧美| 在线观看视频亚洲| 亚洲精品久久久一区二区三区| 韩剧1988免费观看全集| 欧美人在线视频| 久久久久久高潮国产精品视| 欧美成人一区在线| 欧美成人午夜剧场免费观看| 亚洲国语精品自产拍在线观看| 国产欧美久久久久久| 欧美成人激情视频免费观看| 成人福利在线观看| 成人午夜高潮视频| 中文字幕欧美日韩va免费视频| 欧美中文在线视频| 久久久精品视频在线观看| 欧美亚洲另类在线| 97色在线观看| 亚洲人在线观看| 欧美一级视频一区二区| 中文国产成人精品| 3344国产精品免费看| 亚洲高清av在线| 日韩欧美一区二区三区久久| 久久国产一区二区三区| 色吧影院999| 久久免费精品日本久久中文字幕| 亚洲精品视频网上网址在线观看| 久久九九国产精品怡红院| 国产亚洲精品日韩| 日韩大片在线观看视频| 日韩美女视频在线观看| 精品美女久久久久久免费| 欧美综合一区第一页| 国产999精品久久久影片官网| 欧美大成色www永久网站婷| 欧美日韩亚洲91| 亚洲免费视频在线观看| 亚洲欧洲午夜一线一品| 亚洲黄色在线看| 亚洲精品欧美一区二区三区| 欧美中文字幕在线| 亚洲а∨天堂久久精品喷水| 亚洲国产精品99久久| 日本精品久久中文字幕佐佐木| 亚洲欧美在线磁力| 这里只有精品久久| 欧美高清视频一区二区| 国产欧美日韩最新| 高清日韩电视剧大全免费播放在线观看| 中文字幕亚洲欧美日韩在线不卡| 国产精品专区一| 欧美在线日韩在线| 色婷婷亚洲mv天堂mv在影片| 国产欧美日韩专区发布| 亚洲乱亚洲乱妇无码| 久久亚洲春色中文字幕| 亚洲国内高清视频| 国产中文欧美精品| 成人午夜高潮视频| 亚洲国产中文字幕在线观看| 日韩精品免费电影| 俺去了亚洲欧美日韩| 成人在线精品视频| 精品二区三区线观看| 国产成人精品电影| 高潮白浆女日韩av免费看| 国产成人亚洲综合91精品| 久久天天躁狠狠躁夜夜躁| 亚洲美女www午夜| 国产精品91久久| 中文字幕少妇一区二区三区| 国产成人一区二区三区| 欧美国产日韩中文字幕在线| 精品久久久久久久久中文字幕| 亚洲天堂成人在线视频| 国产精品久久久久久亚洲影视| 亚洲电影成人av99爱色| 51视频国产精品一区二区| 中文字幕精品一区二区精品| 视频在线观看99| 欧美最顶级的aⅴ艳星| 欧美一级片在线播放| 亚洲视频免费一区| 亚洲天堂第一页| 孩xxxx性bbbb欧美| 久久天天躁日日躁| 亚洲国产成人91精品| 日日摸夜夜添一区| 国产欧美日韩中文| 亚洲国产精品va在线看黑人动漫| 亚洲二区在线播放视频| 久操成人在线视频| 亚洲国产婷婷香蕉久久久久久| 国产成人在线一区| 欧美日韩国产页| 日本精品在线视频| 亚洲精品久久久久久下一站| 国产高清视频一区三区| 欧美电影免费观看电视剧大全| 日日摸夜夜添一区| 亚洲最大成人网色| 久久视频免费在线播放| 日韩不卡中文字幕| 欧美精品久久久久|