摘要: vjudge传送 这题还真挺难,没想出来。 首先我们要做的是,为了判断所有的重复串,要把这些串放在一个SAM里,但要用特殊字符分隔开来(这里用数字10,以缩小字符集大小)。 接下来我想的是在后缀链接树上dfs,但复杂度是$O(\sum len[i])(i \in 叶子节点)$,这个复杂度上限是$O( 阅读全文
posted @ 2021-03-19 10:39 mrclr 阅读(43) 评论(0) 推荐(0) 编辑
摘要: vjudge传送 给一个字符串,多次询问$[l,r]\(中不同子串的个数。\)(1 \leqslant |S| \leqslant 2000)$ 因为串长才2000,所以可以考虑$O(n^2)$的做法。 令$ans[l][r]\(表示区间\)[l,r]$中不同子串的个数,考虑怎么递推: 我们建立$n 阅读全文
posted @ 2021-03-19 09:47 mrclr 阅读(21) 评论(0) 推荐(0) 编辑
摘要: vjudge传送门 题面:$Q$次询问,每次求子串$[S_l, S_r]$第$k$次出现的位置。 首先,对于原串中的每一个子串,都能在SAM的后缀链接树上找到对应的节点。 那么如果我们知道这个节点的endpos集合,就能找到第$k$次出现的位置了。 所以接下来就要解决这两个问题: 1.快速确定子串在 阅读全文
posted @ 2021-03-19 09:25 mrclr 阅读(26) 评论(0) 推荐(0) 编辑
摘要: vjudge传送门 题面:(用SAM)求串的最小表示法。 首先最小表示法有$O(n)$的做法,但老师把这道题放这是让我们练SAM的,那就说SAM的做法吧。 首先把串的二倍都扔到SAM中,然后可以类比暴力的做法: 暴力的做法是从多个字典序最小的字符开始一位一位的比较,直到当前字典序最小的字符只出现在一 阅读全文
posted @ 2021-03-19 08:25 mrclr 阅读(54) 评论(0) 推荐(0) 编辑