上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 26 下一页
摘要: 题面:洛谷(带翻译) 题解: 直接求相交不太好求,所以考虑求不相交的回文串对数。 设ll[i]表示以i为开头的回文串个数,rr[i]表示结尾<=i的回文串个数。 然后不相交的回文串对数显然就是对于每个$rr[i - 1] \cdot ll[i]$求一次和。 最后再用全集减去不相交的回文串对数即可求出 阅读全文
posted @ 2018-12-04 21:36 ww3113306 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 题面:洛谷 题解: 我们考虑,如果可以将环上每个长度为len的串都提取出来,再做个排序,那这题我们就做出来了! 但是提取$n^2$,怎么办? 考虑破环成链,再扩充为原来的2倍。 然后直接做后缀排序,把长度大于len的串按排序结果顺次列下来,对于每个后缀取出前len个字符构成串,最后得到的就是我们要的 阅读全文
posted @ 2018-12-04 21:27 ww3113306 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 题面: 洛谷 题解: 首先我们需要知道一个性质,串s的最小循环节 = len - next[len].其中next[len]表示串s的一个最长长度使得s[1] ~ s[next[len]] == s[len - next[len] + 1] ~ s[len](详细定义参见KMP) 至于为什么是成立的 阅读全文
posted @ 2018-12-04 21:21 ww3113306 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 题面:洛谷 题解: 还是这个性质:对于每个串而言,本质不同的回文串最多只有O(n)个。 所以我们先求出这O(n)个本质不同的回文串,然后对整个串求一次sa。 然后对于每个回文串,求出它的出现次数,更新答案即可。 如何用后缀数组求一个串的出现次数? 因为每个串都必然是某个后缀的前缀。因此我们先找到这个 阅读全文
posted @ 2018-12-04 21:00 ww3113306 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 题面: 洛谷:[SHOI2011]双倍回文‘ 题解: 首先有一个性质,本质不同的回文串最多O(n)个。 所以我们可以对于每个i,求出以这个i为结尾的最长回文串,然后以此作为长串,并判断把这个长串从中间劈开后左边的一半是否也是一个回文串(判断左边那半的中点的回文半径是否可以跨过当前长串的中点)。 复杂 阅读全文
posted @ 2018-12-04 20:51 ww3113306 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 题面: 洛谷 一句话题意:找前k大回文串(不要求本质不同) 题解: 我们进行一遍manacher即可求出对于每个回文中心而言的最长回文半径。 我们考虑求出f[i]表示回文半径为i的回文串的个数。 那么对于一个i而言,它可以对哪些长回文半径产生贡献呢? [1, r[i]]。(这个应该是很明显的) 因此 阅读全文
posted @ 2018-12-02 00:22 ww3113306 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 题面: 洛谷 题解: 很久之前做的题了,只不过之前一直90.。。。最近才发现是哪里写错了。 我们对字符集建AC自动机。 首先考虑一个暴力的做法,把文章当做一个长串,直接在自动机上跳,但是我们会发现,这样的复杂度可能退化到$n^2$. 因为对于一个类似于aaaaaaaaaaaaaaaa这样的串而言,一 阅读全文
posted @ 2018-12-02 00:17 ww3113306 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 首先在学习这个之前我们需要学会trie树这个东西,详见trie树。 AC自动机就是在trie树的基础上建立起来的。 先看几个定义: 1,fail指针:这个指针指向 等于当前串的某一后缀的串中,深度最大的那个串。因为在trie树上任意一个点都可以代表从root到这个点所构成的串,所以假设我们现在有ab 阅读全文
posted @ 2018-11-19 22:26 ww3113306 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 简而言之,trie树就是把字符当做点的树。 一般而言,我们建trie树都是在树上插入很多个字符串,再利用trie树的性质来做题。 对于任意一个字符串,我们的插入规则如下:(此处默认所有字符串都只有小写字母) 一开始我们在根节点0. 假设当前所在的点为x,当前遍历到的字符为c。 1,我们先检测x这个节 阅读全文
posted @ 2018-11-19 21:37 ww3113306 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 基数排序是一种复杂度为n * max(每个数的位数)的优秀算法,平常用的不多,但求后缀数组的时候为了达到nlogn的复杂度一般都会采用基数排序,因此还是很有必要学一下的。 大概的意思就是说,对于一个数列而言,我们先以个位数为权值桶排一遍得到一个新的排列,然后再在这个排列的基础上以十位数为权值桶排一遍 阅读全文
posted @ 2018-11-19 21:24 ww3113306 阅读(149) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 26 下一页
知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议进行许可。