AC自动机复习总结

传送门

如果你想真正的了解ac自动机,前提是了解kmp和trie树,注意其中的fail指针的用法;
做题的感悟:
个人觉得在构建fail指针的时候,可以通过fail指针的构建完成一些对数据的处理,比如一些没有被mark的状态mark掉,比如进行最短路径的转移等等,还有通过矩阵加速来解决问题

A. 病毒侵袭

AC自动机的水题,只要求判断主串中是否包含至多三个子串,并输出

B. 病毒侵袭持续中

求主串中各个子串出现的次数,每次进行匹配的时候保留当前状态,不断向上fail,对答案进行记录,因为每增加一个后缀就有可能多一个答案,注意预先处理fail指针的时候不需要进行过多的操作,以免多计算答案

D. DNA Sequence

长度为n的串不包含给定子串的个数有多少个,建立自动机构建状态,然后建立状态转移矩阵,用矩阵加速得到答案

E. Censored!

题解:同上题一样,构建自动机,来进行状态转移

G. Ring

题解:利用dp构建包含所有子串的字典序最小的字符串

H. DNA repair

题解:最少修改多少次,使得主串中不包含子串,dp进行状态转移

J. Lost’s revenge

题解:重新构建字符串使得字符串包含的子串数最多,注意不能使用多维数组因为造成大量的空间浪费,通过状态压缩来表示状态。

K. Resource Archiver

题解:给定要求包含的子串和不允许包含的子串,求得到的串最小长度,利用dp进行状态转移

你可能感兴趣的:(训练总结,AC自动机)