有 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...