cf235c

此题神犇clj出的题目啊。。。。题解见:http://codeforces.com/blog/entry/5592

此题要求循环的啊。。首先一开始想的是将s赋值一次,但是那样建立出来的就不全是s的子串了

那么反过来想,即:xi的各种形态中肯定有s的子串也是可以的

所以首先预处理出各个节点的子串个数即从根节点开始扫到各个点的次数

然后在dp一遍,统计。 此处dp统计可以用sort可以用top,时间复杂度给的还是很大的。

那么按照其题解:将xi复制一遍,不要其最后一个字符,然后放到sam上跑一遍,如果匹配长度大于len(xi)则表示满足匹配。那么满足匹配中时由于dp预处理了。所以我找到最后一个匹配长度即可。那么怎么找呢--->由于对于每个当期节点的后一个后缀,其长度定大于当前节点,那么就是当前节点的子串都包含在里面,那么我就可以一直沿着后缀一直往后找直到知道最后一个节点,那么此处就是匹配的最大值了。那么加上那个节点的cnt统计就可以了。此处还有个注意的地方就是由于复制了一遍。所以可能会有多个子串跑到这,所以我们就在最后那个匹配的节点处+vis标记那么这样就不会有重复的了。


此题貌似用exkmp也可以做,但是时间是4000+,sam是500+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值