1. 程式人生 > >洛谷P2414 阿貍的打字機 [NOI2011] AC自動機

洛谷P2414 阿貍的打字機 [NOI2011] AC自動機

這一 聽說 就是 tar 只需要 ref get 思考 需要

正解:AC自動機

解題報告:

傳送門!

這道題,首先想到暴力思路還是不難的,首先看到y有那麽多個,菜雞如我還不怎麽會可持久化之類的,那就直接排個序什麽的然後按順序做就好,這樣聽說有70pts

然後思考一下,正解怎麽做呢QAQ

回到AC自動機中關於fail指針的定義上來,因為fail指針指向的是最長後綴,這意味著,假如a指向b,那麽a字符串中一定包含有root到b這一段字符串

於是假如我們要統計的字符串x,就只需要統計有多少個fail指針直接或間接指向x的ed那個點就是as辣

那不就是,建一棵fail樹,求對於節點x的子樹中有多少個節點是屬於y的嘛

考慮到dfs序的性質,那不就是求兩個y之間有多少個節點嘛,這個就很好解決了鴨,就每次出現的時候+1回溯的時候-1就歐克了

然後如果當前節點是y,就說明當前相關的詢問都做完辣,就可以求值辣

聽說要樹狀數組維護一波?等下解釋QAQ

洛谷P2414 阿貍的打字機 [NOI2011] AC自動機