![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后缀自动机
文章平均质量分 79
我不会额
这个作者很懒,什么都没留下…
展开
-
SPOJ - NSUBSTR Substrings
题目:f[i]表示字符串str中长度为i的子串出现的最大次数,给你一个字符串,输出所有的f[i]思路:对字符串str建立SAM,添加sc表示当前节点的出现次数,然后跑一遍字符串,把经过的节点的sc赋值1,然后每一个节点x都会影响到link[x],即sc[link[x]]+=sc[x],要按照拓扑序来更新。dp[i]表示长度为i的子串出现的最大次数代码:#pragma comment原创 2017-09-15 15:48:35 · 224 阅读 · 0 评论 -
SPOJ - SUBLEX Lexicographical Substring Search 求字典序第k小的子串
题目:求字符串字典序第k小的子串思路:统计每个状态的子串的个数,按字典序寻找代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#includ原创 2017-09-15 22:07:28 · 2854 阅读 · 0 评论 -
HDU - 4416 Good Article Good sentence
题目:给一个字符串S和一系列字符串T1~Tn,问在S中有多少个不同子串满足它不是T1~Tn中任意一个字符串的子串。思路:match[i]表示当前节点能匹配的最长长度代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include原创 2017-09-17 23:08:16 · 300 阅读 · 0 评论 -
SPOJ - LCS Longest Common Substring 求2个字符串的最长公共子串
题目:求2个字符串的最长公共子串的长度思路:对str1建立后缀自动机,然后让str2去跑代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#原创 2017-09-14 22:50:36 · 354 阅读 · 0 评论 -
SPOJ - LCS2 Longest Common Substring II 多个串的最长公共子串
题目:求多个串的最长公共子串思路:对第一个串建立SAM,其余的串在上面跑,与求2个串的最长公共子串不同的是,当跑到p时,还要更新link[p]代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#原创 2017-09-15 10:44:03 · 320 阅读 · 0 评论 -
POJ - 3415 Common Substrings 求2个串大于K的公共子串个数
题目:求2个串大于K的公共子串个数思路:对第一个串建立SAM,通过拓扑序,算出每个节点在串中的出现次数,然后用第二个串去跑SAM,match[i]表示i节点的经过次数代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#includ原创 2017-09-18 10:14:39 · 466 阅读 · 0 评论 -
HDU - 4436 str2int
题目:给你n个由0~9组成的字符串,求不同的子串表示的十进制数的和,对2012取模思路:将这n个串用10连接起来,建立一个SAM,然后跑拓扑序,注意含有前导0的数不要计算否则会重复计算代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#includ原创 2017-09-18 14:17:45 · 441 阅读 · 0 评论 -
HDU - 3518 Boring counting
题目:给定一个字符串str,求str中至少出现2次且不覆盖的子串的个数思路:每插入一个字符str[i],就把str+i+1在当前的SAM中跑一遍,算出每个接待最大匹配长度代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#incl原创 2017-09-18 15:19:56 · 432 阅读 · 0 评论 -
HDU - 4622 Reincarnation
题目:给定一个字符串,求字符串区间[l,r]中的不同子串的个数1 思路:先预处理出来,每当加入一个字符时,新增的子串为len[cur]-len[link[cur]]代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#inc原创 2017-09-18 15:52:42 · 606 阅读 · 0 评论