hihocoder 后缀自动机五·重复旋律8 求循环同构串出现的次数
描述 小Hi平时的一大兴趣爱好就是演奏钢琴。我们知道一段音乐旋律可以被表示为一段数构成的数列。 小Hi发现旋律可以循环,每次把一段旋律里面最前面一个音换到最后面就成为了原旋律的“循环相似旋律”,还可以对“循环相似旋律”进行相同的变换能继续得到原串的“循环相似旋律”。 小Hi对此产生了浓厚的兴趣,他有若干段旋律,和一部音乐作品。对于每一段旋律,他想知道有多少在音乐作品中的子串(重复便多次计)和该旋律是“循环相似旋律”。 解题方法提示 × 解题方法提示 小Hi:我们已经对后缀自动机比较熟悉了,今天我们再来道稍有难度的题。 小Ho:好!这道题目让我们求的是若干串在另一个长串S中各自作为子串出现的次数,只是匹配的方式从完全相等变成了“循环同构”。 小Hi:没错!如果匹配方式是完全相等的话,本题就可以使用AC自动机或者 trie图 完美的解决。 小Ho:既然这个问题也和子串有关系,那么不妨试试后缀自动机。 小Hi:对。和上一期一样,你可以先想想如果询问只有一个串T应该怎么做。 小Ho:嗯,那自然就考虑所有T的循环同构的串在长串S中出现的次数。 小Hi:没错。循环同构有点麻烦,如果我们枚举与T循环同构的串,再依次判断是否在S中出现过。那复杂度至少是O(length(T)^2)的了。 小Ho:恩。比如T="abcd"的话,我们要判断4个串"abcd", "bcda", "cdab", "dabc