有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行每行乙個單詞。每個單詞...