洛谷P2414 阿狸的打字机 [NOI2011] AC自动机

正解: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

猜你喜欢

转载自www.cnblogs.com/lqsukida/p/10353824.html