AC 5题,Rank 18th
学了这么久广义后缀自动机还是不会C题(最后用其他方法勉强过了),思维还是需要训练。
先说正解。
首先这题等价于求$f(S,i,n)$这$n$个串的不同子串的个数。
假设当前字符位置是i,最近的大于等于它的字符位置是j,那么我们可以在j的基础上修改后缀自动机,插入的字符个数是$j-i$。所有的$j-i$相加的个数不会超过10N,这是因为,如果把j的条件弱化为等于$S_i$的位置,那么这样的累和也不会超过10N。这是一个非常重要的性质。赛场上直观感受过,但是没有求出其上界。
这样,我们相当于是在一棵节点数最多为10N的字典树上,走一遍广义后缀自动机。效率是$O(N*10*10)$。每插入一个节点,答案加上$mlen[cur] - mlen[lnk[cur]]$即可。
by cmx