http://www.elijahqi.win/archives/3945
今天研究一天怎么构造始终想不明白 看到这篇blog之后顿悟
为了帮助其他人避免像蒟蒻我一样 想不明白感到难过
于是随便写一写
要是有错误 qwq麻烦指出
(emm退役之后不知道还会不会上blog)
https://www.cnblogs.com/hehe54321/p/8694839.html
看上面两张图中,上面的那张图:后缀链接对应的后缀树上的边是:
5->S===>b,4->5===>baa,3->5===>aa,2->1===>a,1->s===>a,也就是后缀链接起点能接受的所有长度的串,按长度从小到大排,各取第一个字符组成的串
后缀树的根就是S
从某一节点沿着后缀链接走到S,记录下经过所有边代表的串,翻转序列,连成一个字符串,然后翻转整个字符串,就是该节点在后缀自动机上能接受的最长串
某一节点能接受的最长串为S,则该节点能接受的所有串都是S的后缀,往后缀链接跳一步到的节点能接受的串则也是S的
板子
知道一个性质 sam上的parent树就是反串的后缀树
那么我们要求后缀树的时候把原串反过来建SAM即可 这样保证状态节点数什么的都是线性o(n)
那么我们考虑 后缀自动机 par树的含义是 针对我这个节点所能表示的串的最长后缀的位置
我们参照这个图 反串建立后缀自动机的时候我们尝试沿着par树行走 发现反串的par树其实相当于原串的一些前缀 然后每次跳par树的时候都相当于在找一个后缀的前缀
然后那么如果要看后缀树上表示的边到底压缩了哪些字母我们可以考虑 在后缀自动机上用我当前的节点能表示的最长串-fa[当前节点]表示的最长串 然后将其反过来就是后缀树上压缩的边了
贴一道题:
Lyra 是一个灵巧的女孩子,她特别喜欢玩一种叫“石头剪刀布”的游戏,在这个游戏中,每回合双方同时打出一种手势,为石头(r),剪刀(s),布(p)之一,规定石头打败剪刀,剪刀打败布,布打败石头,若手势一样则视为平局。
虽然 Lyra 是一个灵巧的女孩子,她发现她依然赢不了 Evan,潜心研究多日 Evan 的策略后,发现在第二天的 n
n
轮游戏中,Evan 一定以某种固定策略出手势。
这个固定策略(一个长度为 n
n
的由 r,s,p
r,s,p
组成的字符串)就藏在 Evan 的电脑里,被 Evan 加密存储。Evan 的加密方式很奇怪,他先选取一个特定的 d
d
,然后把整个字符串循环右移 d
d
个位置。
Lyra 拿到了加密后的策略串,她想在第二天的石头剪刀布比赛中大败 Evan,注意 Lyra 的策略不一定必须是开始前固定的,可以根据前若干回合的结果修正之后的策略。
在这场石头剪刀布大赛中,对于第 i
i
个回合,获胜可以获得 wi
wi
分,平局获得 di
di
分,而失败获得 0
0
分。Lyra 想知道自己采取最优策略的话,最坏情况下至少从这 n
n