SuffixAutomaton——世界你赢了

初学

那是在2016年的暑假,我写了几天动态点分治,然后想起来省选R1 day2结束之后,yts问faebdc第一题卡不卡后缀自动机。faebdc说他并不会后缀自动机。然后这道题是一道后缀自动机原题的弱化n^n版。

年少无知的我开始搜集SAM的资料,开始啃仅有的几份教程。

然而实在是脑子不够灵通,没有看明白。

又学

转眼之间,到了2016年的11月份,我写了几天FFT,然后想起来省选R1 day2结束之后,yts问faebdc第一题卡不卡后缀自动机。faebdc说他并不会后缀自动机。然后这道题是一道后缀自动机原题的弱化n^n版。

年少无知的我开始搜集SAM的资料,开始啃仅有的几份教程。

然而实在是脑子不够灵通,没有看明白。

然后龙队说他也不会SAM。

我也就有了不再硬啃下去的理由。

然后

转眼到了2017年3月。我发现有很多动态维护字符串的题目,是不好用后缀数组做的,然后想起来省选R1 day2结束之后,Relly说他第一题谢了后缀平衡树,比正解还快,但是因为数组开小,只有暴力分。

年少无知的我开始搜集SBT的资料,开始啃唯一的一篇论文。

SBT易于理解,简洁明了,哲理深刻,意蕴悠长。我用SBT写了几道动态维护字符串的题,比如那道wxh loves string。

然后我自以为万事大吉:静态用SA,动态用SBT。然而现实给了我无情的打击。

再学

转眼之间,几月时间,多少离合悲欢。曾经志在省队少年,化作D类的狗。在省队集训上,PhilipsWeng出了一道和敦敦敦论文题类似的题目,用到的性质,和自动机简直是一拍即合。我发现,即使我能做,但是有些题用SAM的思维来做是会大大降低难度的。

于是我又厚着脸皮开始学SAM。终于,像打通了任督二脉一般,一副自动机的图景在我的面前徐徐展开。

SAM

SuffixAutomaton是一个可以识别字符串的子串的这么一个东西。

要造出可以识别子串的这么一个东西,最简单的就是建一个trie把所有后缀插入。然而这样时间爆炸空间爆炸。

众所周知,字符串总是有很多神奇的性质。充分发掘这些性质,最后可以搞出来时空O(n)O(n)的神奇效果。