UVa11019 - Matrix Matcher

出處:https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1960

解題策略:Aho–Corasick (AC)自動機

以下為本題的測試資料。

3 3

abc

bcd

cde

2 2

bc

cd

假設以下為陣列B,

B = [ bc

cd ]

使用陣列B的每一列建立自動機,是否為單字節點val,紀錄陣列B的每一列所在列數,可能有資料重複的列,所以使用vector紀錄多個列編號

假設以下為陣列A,

A = [ abc

bcd

cde ]

使用陣列A每一列輸入自動機,找到是否有單字節點,更新num[r][c]

找出bc在[ abc 出現的位置的num遞增1 [ 0 1 0

bcd 1 0 0

cde ] 0 0 0 ]

找出cd在[ abc 出現的位置的num遞增1 [ 0 2 0

bcd 2 0 0

cde ] 0 0 0 ]

計算出陣列num為陣列B的列數就是答案。

參考程式碼