莫队&AC自动机:
1、AC自动机,主要应用有以下三类:
模式匹配、字符串统计、字符串构造(+DP)。
以下的题目统计摘自大佬:https://blog.csdn.net/mobius_strip/article/details/22549517
a.模式匹配:这类问题一般都是统计目标串中模式串的个数。下面是oj中的题目编号,和说明:
hdu1686 Oulipo: 寻找模式串的出现次数,可以重复及覆盖,直接求解
hdu2087 剪花布条: 同上
hdu2222 Keywords Search: 同上
hdu2896 病毒侵袭: 同上
hdu3065 病毒侵袭持续中: 同上,不过要注意非法字符直接返回root,否则会RE
hdu3336 Count thestring: 同上上
zoj3228 Searching the String: 同上,不过不允许覆盖,记录每个状态的最晚结束位置即可
zoj3430 Detect the Virus: 同上上,统计很简单,主要是编码有点纠结
b.字符串统计:这类题目一般都是求解某种串个数,可先求解状态转移矩阵然后利用矩阵乘法或 DP求解
poj2778 DNA Sequence: 求解不包含某些子串的串的个数,利用AC自动机构造转移矩阵,然后利用矩阵乘法求解路径个数
hdu2243 考研路茫茫——单词情结:上题的升级版,做法一样,由于长度不定最后要利用快速幂和,有点纠结
zoj1540 Censored!: 题目和上面的类似,不过状态过多不宜使用矩阵乘法,所以利用 DP求解
hdu2825 Wireless Password: 统计关键字不少于k的串的个数,并且每个只用一次,先利用状态压缩 DP统计
c.字符串构造(AC自动机+DP):其实本组和上一组基本相同,不过都是求最优解,所以单独拿出来了,而且没什么共同点
zoj3013 Word Segmenting: 其实这个题目本来是用字典树写的,学了AC自动机之后就优化了一下,求解单词覆盖的最小失败次数
poj3691 DNA repair: 求解将目标串取除某些串的最少操作,改变合法状态时如果对应不同则+1,否则不变;非法则不转移
zoj3545 Rescue the Rabbit: 这就是万恶之源了,AC自动机就是为了他学的,构造最优串,用状态压缩DP记录转移状态,最后求解
hdu2296 Ring: 构造一个串使其权值最大长度最小,而且要字典序最小。有点纠结,DP长度短的优先,然后字典序
hdu3341 Lost's revenge: 传说中的RE神题,由于状态计算错误,导致RE2次,其实就是DP,不过要先将状态分解在拼装
zoj3190 Resource Archiver: 本次学习的收尾题目,传说中的神题,要先构造AC自动机,然后利用最短路优化将问题转化为TSP问题
以上问题我只是做了很少一部分,有待进一步练习。
2、莫队算法
大米饼的莫队入门讲解博客:https://www.cnblogs.com/Paul-Guderian/p/6933799.html
由于时间所限,只会基础的莫队和简单的待修莫队,有待进一步练习提高。
题目特点:
①查询必须离线
②能够以极少的时间推出旁边区间(一般是O(1))
③没有修改或者修改不太苛刻
④基于分块,分块不行,它也好不了哪里去(何况现在还有可持久化数据结构维护的分块)
继续努力。