【知识小结】后缀自动机

与right集合有关的套路

套路仍然是考虑pnt树,找每个节点的right结合,用线段树合并来维护出现位置,然后就可以进行dp和查询
把经典的套路弄熟!

1. 分拆字符串,删除一个字符,对本质不同的串的影响**

7月集训的时侯用来互测的超繁的题
这是简化版,相同的还有bc一道题,不挂出来了

2. 利用出现位置的性质**
CF700E Cool Slogans

这道题利用的性质是:只要pnt在儿子的一个出现位置中出现两次以上和在儿子的right集合(所有位置)出现两次以上等价,所以查询就只需要查任一位置

从上往下dp即可
这是道好题,应该写一下

NOI 2018 你的名字

题意
求T在S的[pl,pr]未出现过的本质不同的子串个数

题解
对S和T都是子串相关,那么就都建后缀自动机。其实一个Trie树后缀自动机就搞定了,只是常数或大一些
既然是S的区间,那么就要在pnt树上线段树合并维护right集合
然后用T和S匹配,查询到当前的匹配长度,标记这段不合法。
最后在T的后缀自动机上统计一下标记即可求出答案

总结:
模板代码的使用。把细节想清楚。
特别是修改代码之后,不能草率。一定要想清楚。这题因为修改没有想清楚,浪费了15min!
本来计划30min,结果多调了50min,非常不应该!
前面的调试脑袋清醒,后面只剩两个点没有通过就非常浮躁。其实是有严重的正确性问题!
没有考虑到在同一个节点缩短长度就可以和S匹配的情况。线段树上要查询right集合最靠右的位置

code

P4022 [CTSC2012]熟悉的文章

题解
二分答案
写出DP方程,单调队列维护
唯一就是感觉需要两个单调队列,为什么大家的题解都只用一个,难道读错题了?
还没有来得及写

P4094 [HEOI2016/TJOI2016]字符串

询问s[a…b]的所有子串和s[c…d]的最长公共前缀的最大值

题解
这题可以练后缀数组基本功
Labelray’s Blog
主要是要想到二分答案,sam也可以查但是麻烦一点。

CF235C Cyclical Quest

给一个主串和多个询问串,求询问串的所有样子不同的周期同构出现次数和

题解
直接匹配,这个可以倍长,也可以在前面删字符(跳pnt即可),
关于去重
kmp求循环节,如果不能整除环长肯定不会有相同的,否则除一下即可。(我竟然想了好久不会,QWQ)
或者直接在sam上打个标记,显然更好写

CF 666E

to be continue 准备把经典的字符串套路和我不会的回文树,字符串计数全部学习和整理一遍

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值