bzoj3172 單詞 AC自動機

2021-07-11 09:08:04 字數 811 閱讀 9814

n個單詞組成了一篇文章,求每個單詞在這篇文章中出現了多少次。

多個字串匹配的問題,建立ac自動機。如果某個單詞在i節點出現了,那麼在i節點fail指標所指節點也出現過。

code: 

#include #include using namespace std;

const int max_n = 1000005;

struct trie t[max_n];

int n, sz, pos[205];

char s[max_n];

int insert()

return u;

}void init()

int q[max_n], vec[max_n], tot = 0;

void get_fail()

while (hd < tl)

q[++ tl] = t[r].ch[c];

int u = t[r].ch[c], v = t[r].fl;

while (v && !t[v].ch[c]) v = t[v].fl;

t[u].fl = t[v].ch[c];

} }

for (int i = tot; i >= 0; i --)

t[t[q[i]].fl].sum += t[q[i]].sum;

}void doit()

int main()

BZOJ 3172 單詞 (AC自動機)

這道題是個裸的ac自動機,但是我還是調了很久qaq。首先如果我們直接用每個單詞來匹配的,時間不是很理想。這道題要用到ac自動機的衍生物 fail樹 我也是做這道題才知道有這個東西 fail樹有這麼乙個結論 乙個字串出現的次數等於以它為根節點的fail樹的子樹中所有節點的cnt的和。根據這個結論,我們...

bzoj3172 單詞 AC自動機

感覺以前寫過。bzoj上不去我也不知道 跑一遍ac自動機,每乙個節點儲存一下屬於多少字串,為它的權值。然後乙個節點表示的字串在整個字典中出現的次數相當於其在fail樹中的子樹的權值的和。ac自動機不要寫掛就好了。ac 如下 include include include define n 11000...

Bzoj3172 單詞(AC自動機)

time limit 10 sec memory limit 512 mb submit 5051 solved 2467 某人讀 一篇 是由許多單詞組成。但他發現乙個單詞會在 中出現很多次,現在想知道每個單詞分別在 中出現多少次。第乙個乙個整數n,表示有多少個單詞,接下來n行每行乙個單詞。每個單詞...