P3808 模板 AC自動機(簡單版)

2022-06-02 04:36:09 字數 965 閱讀 1749

題意:給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。

思路:建完tire,fail之後,開始跑自動機,然後對於走過的點,給乙個標記,防止多次計算即可

為啥呢,因為求得是有多少模式串在文字串出現過,而不是出現次數

1 #include2

using

namespace

std;

3const

int maxn=1000001;4

struct

actrie[maxn];

8int

n,cnt;

9char

s[maxn];

10 queueq;

11void insert(char*s)

1220 trie[u].flag++;21}

22void

getfail()

23 //

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

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

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

37 q.push(v); //

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

39}40}

41int query(char*s)

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

到下乙個兒子53}

54return

ans;55}

56int

main()

62getfail();

63 scanf("%s"

,s);

64 printf("

%d\n

",query(s));

65return0;

66 }

view code

P3808 模板 AC自動機(簡單版)

這是一道簡單的ac自動機模板題。用於檢測正確性以及演算法常數。為了防止卡oj,在保證正確的基礎上只有兩組資料,請不要惡意提交。給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。輸入格式 第一行乙個n,表示模式串個數 下面n行每行乙個模式串 下面一行乙個文字串。輸出格式 乙個數表示答案 輸...

P3808 模板 AC自動機(簡單版)

學習1 小蒟蒻yyb的部落格 學習2 大佬的板子 ac自動機 求多個模式串在文字串 現的次數 trie樹 根節點為0 int cnt 0 編號 void clear int x void build string s now ac now vis s i a ac now end 標記單詞結尾 qu...

P3808 模板 AC自動機(簡單版)

給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。第一行乙個n,表示模式串個數 下面n行每行乙個模式串 下面一行乙個文字串。乙個數表示答案 2aaa aa2subtask1 50pts length 模式串 106,length 文字串 106,n 1 subtask2 50pts le...