不包括相同子串 #
后缀自动机中每一个路径都代表一个子串,所以第 k 小子串就对应第 k 小路径,所以我们可以先计算从每个状态开始有多少条路径,然后再根据 k 判断走哪条路径。计算路径的方法如下:
pathu=1+∑v∈nextpathv
包括相同子串 #
由于标准的后缀自动机里是体现不出重复路径的信息的,所以我们要在上问的基础上维护每个状态代表的子串们出现的次数occur:
occuru=∑v∈nextoccurv
如何理解?当前状态的子串们都是下一个状态子串们的前缀,所以下一个状态的出现次数应当加到当前状态上。特别的,如果当前状态是终止状态,它的出现次数应为 1。
路径数的计算与前面类似:
pathu=occuru+∑v∈nextpathv
例题:[TJOI2015]弦论
代码: