D, E: Silly_Tape的字符串

容易发现,一个串 S 内的奇数长度的回文子串的数量随着长度减少单调非递减,因为对于一个长度为 K 的奇数长度回文串 P,

P[2:K-1], P[3:K-2] ... (下标从1开始) 显然也是奇数长度的回文串。

因此有一个很显然的结论: 设 L 为字符串 T 内最长奇数长度回文串的长度,带入连续奇数求和公式,则有字符串 T 的总价值为 ceil(L / 2) ^ 2

同时因为奇数长度回文子串的数量具有单调性,可以通过二分查找来确定最大的 L,接下来考虑如何检查二分查找每一步选择的中点 mid 是否可行。

对串 T 进行一遍 Manacher 算法获取 T 内以每个下标 i 为中心的最长回文串长度 D[i] 后,容易发现上面的问题实际上是查询 D 中 满足 floor(mid / 2) + 1 <= i <= D的长度 - floor(mid / 2) 且 D[i] >= mid 的 i 的数量。

对于 easy version,因为只需要存在一个长度为 L 的奇数长度回文子串就可以,我们只需要查询区间 D[i] 的最大值,使用 ST 表即可。

对于 hard version,使用可持久化线段树即可。

全部评论
实在太牛
点赞 回复 分享
发布于 2024-04-07 15:33 湖北
我去你好强
点赞 回复 分享
发布于 2024-04-07 00:10 香港
floor(mid / 2) + 1 <= i <= D的长度 - floor(mid / 2)  这个约束是避免在区间查询时越界,查询到子串所不包含的字符。
点赞 回复 分享
发布于 2024-04-06 18:07 陕西

相关推荐

02-01 12:05
复旦大学 Java
腾讯的提前批大概率应该是没有笔试的,但是这个时候有相当部分的同学简历估计都没有准备好,没准备好的同学也不用急,大部分都是3月之后开,这个时候开的绝大多数都是神仙打架,问的东西也比较难,打算投递的同学也多看下计算机网络和操作系统,腾讯对这部分的知识问的比较多。另外多刷下牛客的热门题库,刷题注意刷ACM模式,和牛客的周赛题,腾讯有的部门会从这里面出原题。我是@程序员花海关注我,带你了解更多校招资讯!
程序员花海:还没有来得及准备的同学可以看下学习路线:https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users算法题:https://www.nowcoder.com/feed/main/detail/20e7a999fa04485b88340a274411ca0d?sourceSSR=users八股文:https://www.nowcoder.com/discuss/833102362771251200?sourceSSR=users简历书写方式:https://www.nowcoder.com/discuss/839907820706205696?sourceSSR=users都是以前在牛客发的文章~
AI求职实录
点赞 评论 收藏
分享
小肥罗:我觉得“实习生不了解也很正常”可能只是客套话,面试官的标准是希望答上来。另外,面试官没有马上结束面试,恰恰证明他想给你机会,想多考察你看你是否其他方面符合要求。面试时间长反而证明面试官还是看好你的,想多给你机会表现一下自己。
应届生简历当中,HR最关...
点赞 评论 收藏
分享
2025-12-17 17:53
门头沟学院 Web前端
海梨花:我之前面试也是问我非技术问题,问过我怎么统计北京出租车数量,不借助任何网络或者其他平台的帮助,有足够多的人可以帮忙
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务