上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 19 下一页
摘要: 直接统计长度为$i$的回文子串有多少个 然后倒叙枚举长度,快速幂统计一下即可 复杂度$O(n \log n)$ 阅读全文
posted @ 2018-11-15 17:06 remoon 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 不算很难的一道题吧.... 很容易想到枚举断点,之后需要处理出以$i$为开头的最长回文串的长度和以$i$为结尾的最长回文串的长度 分别记为$L[i]$和$R[i]$ 由于求$R[i]$相当于把$L[i]$反过来求一遍,因此只需考虑求$L[i]$ 考虑$manacher$算法 我们注意到,当$mr$扩 阅读全文
posted @ 2018-11-15 17:03 remoon 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定一个串$S$,询问有多少对相交的回文子串 直接做的办法: 我们先考虑求出以$i$为结尾的串的数量,这个很好统计 之后,我们再求出所有包含了点$i$的回文串的数目 这个相当于在$i$的左边加上一个等差数列,右边同理可以统计出来 二次差分后维护这些东西就可以做到$O(n)$ 听起来就很难 阅读全文
posted @ 2018-11-14 22:21 remoon 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 求一个串中有多少个回文子串 这..... 妥妥的模板题吧.... 对所有的$r[i] / 2$进行求和即可,其中,$r[i]$为以$i$为中心的回文半径 $r[i] / 2$怎么来的,画下图就知道了... 复杂度$O(n)$ 阅读全文
posted @ 2018-11-14 22:16 remoon 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 这个操作十分的复杂 但是可以拿平衡树维护 直接二分答案然后用$hash$值判断即可 复杂度$O(10000 * log^2 n + n \log n)$ 阅读全文
posted @ 2018-11-13 16:38 remoon 阅读(241) 评论(0) 推荐(0) 编辑
摘要: $bzoj$跑的太慢了...... 我们考虑用线段树来解决这个问题 考虑扫描线 当扫到左端点$i$时,我们把线段$i$加入线段树 同时,对于每个左端点$i$,我们在线段树上二分出最远的$r$满足$r$被覆盖了$k$次以上 复杂度$O(n \log n)$ 然后$TLE$了,这一定不是我的锅... 阅读全文
posted @ 2018-11-13 15:28 remoon 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 既然只有一位的不同,那么我们可以枚举这一位.... 我们只需要快速地计算去掉某一位的$hash$值.... 由于$hash(S) = \sum s[i] * seed^i$,因此去掉第$i$位的权值只需要用$hash(S) - s[i] * seed^i$ 由于字符串两两不相同,因此不存在两个串去掉 阅读全文
posted @ 2018-11-13 14:13 remoon 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 显然只能有$hash$来做.... 我们需要一个东西来维护$\sum i * seed^{rank[i]}$ 很自然地联想到平衡树 如果以序列下标建立一棵平衡树,那么无法处理 因此,可以以权值为下标建立一棵平衡树,把$rank[i]$拆分成若干个$sz[ls] + 1$即可维护 具体而言,记$pos 阅读全文
posted @ 2018-11-13 12:52 remoon 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 依稀记得,$NOIP$之前的我是如此的弱小.... 完全不会$KMP$的写法,只会暴力$hash$.... 大体思路为把一个串的哈希值拆成$26$个字母的位权 即$hash(S) = \sum\limits_{a} a * \sum w^i * [s[i] == a]$ 通过记录每个字母第一次出现的 阅读全文
posted @ 2018-11-12 22:06 remoon 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 可以非常轻易的将题意转化为有多少子串满足排名相同 注意到$KMP$算法只会在当前字符串的某尾添加和删除字符 因此,如果添加和删除后面的字符对于前面的字符没有影响时,我们可以用$KMP$来模糊匹配 对于本题而言,在末尾插入一个字符时,如果$S$串和$T$串中这两个字符的排名一样,那么它们对前面的影响也 阅读全文
posted @ 2018-11-12 21:38 remoon 阅读(357) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 19 下一页