【BZOJ3473】字符串

该博客介绍了如何利用后缀自动机(SAM)解决一个字符串问题,即找出每个字符串中有多少子串是至少k个字符串的子串。在100%的数据范围内,n和k不超过10^5,字符串总长度不超过10^5。通过建立SAM,并结合Parent树进行动态规划,实现O(nn√)的时间复杂度解决方案。同时指出了张天扬论文中关于SAM构建方法的错误,并提供了修正方法。
摘要由CSDN通过智能技术生成

Description

给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串?
Input

第一行两个整数n,k。
接下来n行每行一个字符串。
Output

一行n个整数,第i个整数表示第i个字符串的答案。
Sample Input

3 1

abc

a

ab

Sample Output

6 1 3
HINT

对于 100% 的数据,1<=n,k<=10^5,所有字符串总长不超过10^5,字符串只包含小写字母。

Source

Adera 1 杯冬令营模拟赛

对多串建一个SAM.我们在最后再讨论这个建法..(张天扬论文里的做法有误…

建好SAM,对每个节点放到SAM上运行,不断向Parent树的根节点上走,把路径上的节点都计个数.为了避免出现重复,记录每个节点最后一次被访问是在哪个串,然后串在运行的时候如果遇到了这个串已经访问过一遍的节点就停止.复杂度是 O(nn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值