2534: Uva10829L-gap字符串
2534: Uva10829L-gap字符串
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 177 Solved: 66
[Submit][Status][Discuss]
Description
有一种形如uvu形式的字符串,其中u是非空字符串,且V的长度正好为L,那么称这个字符串为L-Gap字符串
给出一个字符串S,以及一个正整数L,问S中有多少个L-Gap子串.
Input
第一行一个数字L
第二行一个字符串S
Output
一个数字表示S中有多少个L-Gap子串.
Sample Input
aabbaa
Sample Output
Hint
S的长度不超过50000,L<=10
HINT
Source
【题意】
UVU形式的串的个数,V的长度规定,U要一样,位置不一样即为不同字串
【分析】
表示做了poj3693还是不会做这题。
为什么会想到枚举L然后分块呢????
为什么呢????
这种方法于我而言还是有点难理解的啊。
主要是分块!!
任意一个满足条件的UVU,假设U的长度是len,那么左端的U必然包含按照len切分的T串的某个字串,及0,len,2len,3len...。(这点要仔细想清楚)
那么枚举每个端点i*len,然后利用RMQ求后缀i*len和后缀i*len+L+len的LCP,然后字符串T反向,再求一遍反向的LCP2。(其中LCP要小于等于len,否则会重复,仔细想清楚)
最后累加求和sum+=(LCP+LCP2-1)-len+1。(这点想清楚为什么是-len)
blog:http://blog.csdn.net/u011526463/article/details/14000693
还有,其实,貌似不用后缀数组直接两个while前后就可以了。时间貌似还是nlogn的。
这道题我看了100遍!!
现在又明白了一点了ORZ。。。分块屌ORZ。。。
好吧,是按照u的长度分块!!
为什么呢,目的是:答案串的u至少包含一个分割点(上面的蓝色突起)
我们对于其包含的第一个分割点时计算他!!!(就是上面红色圈起的部分)
如果匹配长度越过第二个分割点,那么是会重复计算的,所以在这一题,向前匹配和向后匹配都可以直接while,越过分割点的时候就结束。
ORZ。。。 (转载自Konjakmoyu)
__EOF__

本文链接:https://www.cnblogs.com/shenben/p/6595853.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术