首页 > 其他 > 详细

[NOI2018]你的名字(68pts)

时间:2018-12-23 13:39:06      阅读:133      评论:0      收藏:0      [点我收藏+]

SAM真让人头秃。

题面
https://www.luogu.org/problemnew/show/P4770

首先考虑 l=1,r=∣S∣的做法
如果对于ION2018的子串不用判重的话,对ION2017建SAM跑一遍就好了.
此时ION2018的每一个前缀对答案的贡献为前缀长度-匹配长度。
考虑怎么去重。
这应该算是SAM比较常用去重的一种套路。

对ION2018建出SAM。
原本就算答案的方式是枚举子串的右端点的位置。
现在改为枚举枚举SAM上的节点。
由于对于每种串要只计算一次。
先计算出每个right集合再ION2018第一次出现的位置tag[i]。(这里只是选择多个相同的串中的一个作为代表元素而已)
再对ION2018这个字符串的每一个位置计算出与ION2017的最大匹配长度lim[i]。
然后可以这么计算答案:
技术分享图片

[NOI2018]你的名字(68pts)

原文:https://www.cnblogs.com/Creed-qwq/p/10163935.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!