摘要:
题面:洛谷(带翻译) 题解: 直接求相交不太好求,所以考虑求不相交的回文串对数。 设ll[i]表示以i为开头的回文串个数,rr[i]表示结尾<=i的回文串个数。 然后不相交的回文串对数显然就是对于每个$rr[i - 1] \cdot ll[i]$求一次和。 最后再用全集减去不相交的回文串对数即可求出 阅读全文
摘要:
题面:洛谷 题解: 我们考虑,如果可以将环上每个长度为len的串都提取出来,再做个排序,那这题我们就做出来了! 但是提取$n^2$,怎么办? 考虑破环成链,再扩充为原来的2倍。 然后直接做后缀排序,把长度大于len的串按排序结果顺次列下来,对于每个后缀取出前len个字符构成串,最后得到的就是我们要的 阅读全文
摘要:
题面: 洛谷 题解: 首先我们需要知道一个性质,串s的最小循环节 = len - next[len].其中next[len]表示串s的一个最长长度使得s[1] ~ s[next[len]] == s[len - next[len] + 1] ~ s[len](详细定义参见KMP) 至于为什么是成立的 阅读全文
摘要:
题面:洛谷 题解: 还是这个性质:对于每个串而言,本质不同的回文串最多只有O(n)个。 所以我们先求出这O(n)个本质不同的回文串,然后对整个串求一次sa。 然后对于每个回文串,求出它的出现次数,更新答案即可。 如何用后缀数组求一个串的出现次数? 因为每个串都必然是某个后缀的前缀。因此我们先找到这个 阅读全文
摘要:
题面: 洛谷:[SHOI2011]双倍回文‘ 题解: 首先有一个性质,本质不同的回文串最多O(n)个。 所以我们可以对于每个i,求出以这个i为结尾的最长回文串,然后以此作为长串,并判断把这个长串从中间劈开后左边的一半是否也是一个回文串(判断左边那半的中点的回文半径是否可以跨过当前长串的中点)。 复杂 阅读全文