AC自動機模板 洛谷3796

2021-08-03 14:48:53 字數 1123 閱讀 7975

ac自動機的第三個模板

其實,個人覺得,目前我寫的這三個不同的模板完全是可以合併在一起求解的。

只是,在這兩個無關聯的oj上,同乙個ac自動機都可以完成的問題被拆成了三道題而已。

因此,**只需要略加修改即可解決這道題。

具體題目請上洛谷檢視

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct tree//字典樹

ac[100000];//trie樹

int cnt=0;//trie的指標

struct result

ans[100000];//所有單詞的出現次數

bool

operator

<(result a,result b)

inline

void build(string s,int num)

now=ac[now].vis[s[i]-'a'];//向下構造

}ac[now].end=num;//標記單詞結尾

}void get_fail()//構造fail指標

}while(!q.empty())//bfs求fail指標

else

//不存在這個子節點

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

//當前節點的這個子節點指向當

//前節點fail指標的這個子節點 }}

}int ac_query(string s)//ac自動機匹配

return ans;

}int main()

ac[0].fail=0;//結束標誌

get_fail();//求出失配指標

cin>>s[0];//文字串

ac_query(s[0]);

sort(&ans[1],&ans[n+1]);

cout

<1].num<1].pos]}

return

0;}

AC自動機模板3 洛谷3796

ac自動機的第三個模板 其實,個人覺得,目前我寫的這三個不同的模板完全是可以合併在一起求解的。只是,在這兩個無關聯的oj上,同乙個ac自動機都可以完成的問題被拆成了三道題而已。因此,只需要略加修改即可解決這道題。具體題目請上洛谷檢視 include include include include i...

洛谷 3796 模板 AC自動機(加強版)

題目描述 有n個由小寫字母組成的模式串以及乙個文字串t。每個模式串可能會在文字串 現多次。你需要找出哪些模式串在文字串t 現的次數最多。輸入格式 輸入含多組資料。每組資料的第一行為乙個正整數n,表示共有n個模式串,1 n 150 1 n 150 1 n 15 0。接下去n行,每行乙個長度小於等於70...

P3796 模板 AC自動機

傳送門 ac自動機的模板 簡單的理解就是字典樹上的kmp 注意陣列不要開太大 不然每次memset耗時太多 有乙個小優化 每次走 fail 邊找匹配時只有一些會更新答案 那麼就可以把沒用的fail邊壓縮掉 設 g x 表示從 x 點一直走 fail 邊,走到的第乙個有結束標記的點 那麼找匹配時就只有...