【hdu5219】Repeating 题解

题目大意

       给定一个长度为 n 的小写字符串,问有多少个子串没有循环节。
       n<=1e5

题解

       套路×套路

       因为会出现大循环套小循环的情况,所以我们用莫比乌斯函数来容斥,那么问题变成,枚举一个循环长度 L,问有多少子串的循环节长度是 L 的倍数。

       然后在字符串上每 L 个建立一个关键点。对相邻的两个关键点 i 和 j,假设这两个前缀的 lcs 是 l1,这两个后缀的 lcp 是 l2,那么把这个长度为 l1+L+l2 的字符串提取出来(i 往前 l1 步,j 往后 l2 步),这里面任意一个长度为 L 的倍数(除了 1 倍)的子串都满足循环节长度是 L 的倍数。
       为了避免计重,可限制 l1 < L。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值