AC自動機 矩陣快速冪2 POJ 2778

2021-10-22 16:28:51 字數 1220 閱讀 5657

link

題意:有m種dna序列是致病的,問長為n且不包含致病序列的dna有多少種

參考題解,思路:

我們可以先對這m種dna建立trie樹, 然後建立乙個圖,離散數學中的, 然後快速冪即可,建圖是對於相鄰兩點來建的, 如果a->b

且b不為乙個治病串的終點那麼其就是可以到達的。

#include

#include

#include

using

namespace std;

const

int mod =

100000

;struct matrix

;matrix

(int _n)}}

matrix operator*(

const matrix &b)

const}}

return ret;}}

;struct trie

void

init()

intgetid

(char c)

void

insert

(char s)

now = tmp;

} end[now]

=true;}

void

build()

}while

(!q.

empty()

)else}}

} matrix getmatrix()

}return ret;}}

;trie ac;

char buf[20]

;matrix pow_mat

(matrix a,

int n)

return ret;

}int

main()

ac.build()

; matrix a = ac.

getmatrix()

; a =

pow_mat

(a, n)

;int ans =0;

for(

int i =

0; i < a.n; i ++

) ans =

(ans + a.mat[0]

[i])

% mod;

printf

("%d\n"

, ans);}

return0;

}

poj2778 ac自動機 矩陣快速冪

poj2778 求長度為m且不包含n個子串的種類數.參考自這個部落格.ac自動機 矩陣快速冪.這兒有個結論.給定乙個有向圖,問從a點恰好走k步 允許重複經過邊 到達b點的方案數mod p的值 把給定的圖轉為鄰接矩陣,即a i,j 1當且僅當存在一條邊i j。令c a a,那麼c i,j a i,k ...

poj2778 ac自動機 矩陣快速冪

給m個子串,求長度為n的不包含子串的母串數,最直接的應該是暴搜,肯定tle,考慮用ac自動機 將子串建成字典樹,通過next表來構造矩陣,然後用矩陣快速冪求長度為n的數量 鄰接矩陣 對於a i,j k 是指從i到j經過k個點的所有情況數 注意對於end陣列,如果某個節點如果fail指標end陣列為1...

poj2778(AC自動機 矩陣快速冪)

題意 給你n個字串,問你長度為m的字串且字串中不含有那n個子串的字串的數量 解題思路 這道題一開始就不太懂,還以為是組合數學的題目,後面看了別人的部落格,才知道這是屬於ac自動機的另一種用法,是關於fail陣列的運用,因為題目問的是不允許包含那n個字串,所以我們可以這麼想,假設乙個trie樹每個結點...