
回文树
Spy97
这个作者很懒,什么都没留下…
展开
-
BZOJ 5384 有趣的字符串题 最详细的题解
题意 给一个长度为n的字符串,m次询问(l,r)求l到r内本质不同的回文子串数量 题解 看各路题解,一脸懵逼 终于在《金策 字符串算法选讲》中找到了关键疑惑答案 先说暴力 离线询问对r排序,考虑增加一个字符,右边界到了r,每次在回文树上暴力跳fail统计以r为结尾的新增回文串。注意到每一个回文串影响的左端点是一个区间 比如说当前枚举到的回文串为b,那么左区间落在[上次b出现的位置的起点+1,本次b...原创 2019-08-05 11:59:02 · 846 阅读 · 0 评论 -
HDU 5421 Victor and String 回文树
题意 一开始一个空串,4中操作 1.首部添加一个字符 2.尾部添加一个字符 3.询问当前串的回文串种类数 4.询问当前串的回文串个数 题解 对回文树进行改造 对于指向串尾的指针,这时需要两个变量维护 L,RL,RL,R ,从中间位置开始先两侧扩展 同理,指向上一个回文串结点的 lastlastlast 也需要变为两个 last[0],last[1]last[0],last[1]last[0],l...原创 2019-08-24 18:29:23 · 154 阅读 · 0 评论 -
Gym 100543G Virus synthesis
题意 有AGTC四种字符,一开始有一个空串,每次操作,可以在首或尾加任意个字符,或者将已有字符镜面复制(左右两种复制方法),要求最少的操作步数使得得到给出的字符串 题解 首先,最后的串一定是从他的回文子串向两侧添加得到的 所以,只需要考虑构成回文串的最小操作数 设回文树树中一节点 uuu, 其答案为 dp[u]dp[u]dp[u],长度为 len[u]len[u]len[u],其父亲为 vvv ...原创 2019-08-25 12:31:40 · 394 阅读 · 0 评论 -
Codeforces 932G Palindrome Partition
题意 给一个串,划分成k个部分,使得这k个部分整体是回文 题解 转化为 s1sns2sn−1...sn/2sn/2+1s_1s_ns_2s_{n-1}...s_{n/2}s_{n/2+1}s1sns2sn−1...sn/2sn/2+1 变为划分为k个部分,每个部分内部是回文 dpdpdp 方程很好想, dp[i]=∑dp[j]∗[s[j+1,i]为回文]dp[i]=\sum dp[...原创 2019-08-26 12:07:29 · 232 阅读 · 0 评论 -
LOJ 6070基因 回文树 分块
提交链接 题解 分为n\sqrt{n}n 个块,每个块预处理出起点到 n 的回文树,需要保存的信息有区间的回文串种类个数、区间的某种结点出现的最早位置以及区间的最长回文前缀对应的结点 后两个都是为了向前插入准备的 这是因为,如果向前插入的过程中,产生的一个新的结点,我们需要看这个结点在区间内是否出现过, 此外,向前插入,需要从最长回文前缀开始 这道题需要对回文树有深入的理解,并且要用到翁文涛在...原创 2019-08-27 09:26:37 · 330 阅读 · 0 评论