【后缀自动机】CodeForces 123D String

通道:http://codeforces.com/problemset/problem/123/D

题意:定义F(s,x)表示s中的子串的子串等于x的有多少个,求和,例如,F(babbabbababbab, babb) = 6. The list of pairs is as follows:(1, 4), (4, 7), (9, 12),会产生

  • (1, 4)
  • (4, 7)
  • (9, 12)
  • (1, 4), (4, 7)
  • (4, 7), (9, 12)
  • (1, 4), (4, 7), (9, 12) 所以对于状态babb是6,求总和

思路:直接SAM,然后把每一段[val[fa[i]]+1, val[i]]×num[i]*(num[i] + 1)/2即可,num[i]表示I节点往下走有多少条路径

代码https://github.com/Mithril0rd/Rojo/blob/master/cf123d.cpp

TAG:SAM

转载于:https://www.cnblogs.com/Rojo/p/4032048.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值