【后缀自动机】 SPOJ NSUBSTR

快速通道:http://www.spoj.com/problems/NSUBSTR/

题意:给出一字符串,定义F[x]为长度为X的相同子串出现的次数,求1-|S|的F值

思路:建完后缀自动机后,我们拓扑一下,然后从底到上cnt[i]表示i节点的内容出现了多少次,则答案:ans[len]=max(ans[len],cnt[i]),这里有个小细节就是如果长度为2的出现了3次,而长度为3的出现了4次,故要更新长度为2的出现了4次。

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

新技能: 拓扑,基数排序

posted @ 2014-10-15 23:01  mithrilhan  阅读(140)  评论(0编辑  收藏  举报