Jzoj2921【NOI2012模拟题】字符串识别

该博客讨论了一道关于字符串识别的NOI2012模拟赛题目,作者通过建立后缀自动机(SAM)并求解parent树,预处理倍增查询,来寻找每个位置上满足条件的最短子串长度。尽管作者认为使用后缀数组的解决方案更简洁,但其提供的SAM方法也能实现O(log n)的查询效率。文章中详细解释了两种情况:1. 被最短区间覆盖;2. 区间延伸,并描述了如何结合线段树和二分查找找到答案。然而,作者承认代码复杂且运行速度较慢。
摘要由CSDN通过智能技术生成

题意:给一个字符串,对于每个位置i,求出最短满足的子串[l,r]使得i∈[l,r]且这个子串只出现一次,输出这个子串的长度

神(shui)题,AC后看了下别人的code发现全都是后缀数组(难看

可能是因为我太弱了所以只想到SAM的算法

做法:建立SAM,求出parent树,预处理倍增,让后就可以O(lg n)查询一个字串的出现次数了


接下来,我们对于每个l∈[1,n],我们求出一个最小的r使得[l,r]在整个串里面只出现一次

那么对于每个点i,ans[i]有两种情况:

1.i被一个最短的区间[lj,rj]覆盖,那么我们可以

把这些l,r区间按长度从大到小排序,并且用线段树区间覆盖

2.有可能是一个区间[lj,rj](rj<i)的延伸[lj,i]

对于这种情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值