模板 AC自動機(簡單版)

2021-08-20 09:43:47 字數 810 閱讀 6778

有 nn 個由小寫字母組成的模式串以及乙個文字串 tt 。每個模式串可能會在文字串中出現多次。你需要找出哪些模式串在文字串 tt 中出現的次數最多。

trie樹打錯了,改了我幾個小時。。。

其實,ac自動機只是在trie樹上做kmp罷了。

建樹(不多說)

構建fail指標。trie樹的失配指標是指向:沿著其父節點 的 失配指標,一直向上,直到找到擁有當前這個字母的子節點 的節點 的那個子節點。複雜???對,我也是這麼想的。看多幾遍**吧。

查詢(不多說)

#include

#include

#include

#include

using

namespace

std;

const

int maxn=1e6+77;

struct ac

ac[maxn];

int n,cnt=0;

void build(char *c)

ac[u].end+=1;

}void getfail()

}while(!q.empty())

else

ac[u].vis[i]=ac[ac[u].fail].vis[i];}}

}int acm(char *st)

}return ass;

}int main()

ac[0].fail=0;

getfail();

scanf("%s",c);

printf("%d",acm(c));

}

AC自動機(簡單版)

覺得ac自動機怪簡單是怎麼回事?可能題太裸了 網上講ac自動機和tire樹講的比我好的dalao數不勝數,我就不多贅述了,權當是掛個板子吧。其實char和strlen還是挺好用的。include include include using namespace std struct tire tr 1...

模版 AC自動機(簡單版)

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

AC自動機模板

ac自動機模板 ac自動機模板 使用方法 1 init 初始化函式 2 insert str 插入字串函式 3 build 構建ac自動機 4 query str 返回出現的字串個數 使用需注意事項 1 注意輸入的字元的範圍,需對next和其二維大小及相關引數進行更改 2 注意next fail和e...