P5357 模板 AC自動機(二次加強版)

2022-06-02 04:36:08 字數 1162 閱讀 8650

題意:給出模式串,再給出文字串,求出每個模式串的出現次數

思路:經典的跑ac自動機的題,但是有個坑:會有相同的字元

這道題得建fail樹跑dfs,不然會超時

1 #include2

using

namespace

std;

3const

int maxn=1e6+10;4

struct

actrie[150*80];8

intn,cnt;

9char

s[maxn];

10 queueq;

11string zifu[200

];12

int sto[maxn]; int num=0;13

int mx=0;14

intvis[maxn];

15void

init()

1624

void insert(int

x)25

33 vis[u]=++num;

34 trie[u].flag++;35}

36void

getfail()

37 //

不存在該節點,第二種情況

50 trie[v].fail=trie[fail].son[i]; //

第三種情況,直接指就可以了

51 q.push(v); //

存在實節點才壓入佇列52}

53}54}

55int query(char*s)

5667 u=trie[u].son[v]; //

到下乙個兒子68}

69return

ans;70}

71int

main()

80getfail();

81 scanf("%s"

,s);

82query(s);

83 printf("

%d\n

",mx);

84for(int i=1;i<=n;i++)88}

89return0;

90 }

view code

P5357 模板 AC自動機(二次加強版)

題目大意 給n個模式串和乙個主串,分別輸出每個模式串在主串 現過幾次 題目思路 ac自動機模板題,ac自動機就是先建乙個字典樹,然後建fail指標,建fail的時候如果是模式串中給的字元,就建fail,否則就繼承之前的fail情況,這是為了以後不用跳fail能直接得到想要的值。接著就是最精華的地方,...

洛谷 5357 模板 AC自動機(二次加強版)

題目描述 給你乙個文字串 s 和 n 個模式串 t 1.n t t1 n 請你分別求出每個模式串 t it i ti 在 s 現的次數。輸入格式 第一行包含乙個正整數 n 表示模式串的個數。接下來 n 行,第 i 行包含乙個由小寫英文本母構成的字串 t it i ti 最後一行包含乙個由小寫英文本母...

洛谷P5357 AC自動機 二次加強版

題目大意 給你n個模式串t it i ti 乙個匹配串s.問你每個模式串出現過多少次.n 2 e5,ti 2e5 s 1e6 n leq 2e5 sum t i leq 2e5 s leq 1e6 n 2e5,ti 2 e5,s 1 e6題目思路 模板 優化。其實我們可以發現ac自動機在查詢的時候,...