题意: 给定一个长度不超过 10W 的只包含小写字母的字符串,从下标 0 到 n−1.从下标 0 开始操作, 每次对于下标 pos查找下标 pos 开始的子串中最长的在其他地方出现过的长度,其他出现的位置要求起点在位置 pos 之前,然后 pos 移动到这个长度之后继续操作:如果没有这样的最长串儿就直接 pos++,继续操作,直到 pos=n 结束. 对于上述两种操作,前者输出最大长度 K 以及这种串儿最左边出现的位置:后者输出 −1 和 s[pos] 的 ASCII码值. 精炼一下题意:就是求…
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=5558 题目: Alice's Classified Message Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 789    Accepted Submission(s): 311 Problem Description A…
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5558 Problem Description Alice wants to send a classified message to Bob. She tries to encrypt the message with her original encryption method. The message is a string S, which consists of Nlowercase let…
http://acm.hdu.edu.cn/showproblem.php?pid=5558 对于每个后缀suffix(i),想要在前面i - 1个suffix中找到一个pos,使得LCP最大.这样做O(n^2) 考虑到对于每一个suffix(i),最长的LCP肯定在和他排名相近的地方取得. 按排名大小顺序枚举位置,按位置维护一个递增的单调栈,对于每一个进栈的元素,要算一算栈内元素和他的LCP最大是多少. 如果不需要输出最小的下标,最大的直接是LCP(suffix(st[top]),  suff…
题意: 给出 n 个串,求出这 n 个串所有子串代表的数字的和. 题解; 首先可以把这些串构建后缀自动机(sam.last=1就好了), 因为后缀自动机上从 root走到的任意节点都是一个子串,所有可以利用这个性质来做 我们发现对于dp[u]−>dp[v]过程,如果之前走到 dp[u] 的有 12,2 两步,假设现在往 3 这条边走, 得到 12∗10+3,2∗10+3,那么其实这些值的贡献是可以一次性计算的,无论之前走到 dp[u] 的有几条路,都需要让他们全部 ∗10,而 3 的贡献则是由走…
题目见此 题解:首先所有后缀都在最后一个np节点,然后他们都是从1号点出发沿一些字符边到达这个点的,所以下文称1号点为根节点,我们思考一下什么时候会产生lcp,显然是当他们从根节点开始一直跳相同节点的时候,所以思路就是先找出每个节点被几个后缀经过,这显然把边反转倒着找就可以了,然后他会被出现次数sz个串经过. 出现次数等于parent树子树中np类节点的个数,这跑个dfs就好了,一个相同前缀产生的贡献是sz*(sz-1)/2 然后思考一个点可能代表多个子串,但是他们的出现次数都是相同的,所以单个…
http://www.lydsy.com/JudgeOnline/problem.php?id=3998 后缀自动机应用的一个模板?需要对len进行一个排序之后再统计每个出现的数量,维护的是以该字符串为前缀的字符串数量和某字符串的出现数量. wa了两次,写题时犯得错误有: 1.使用样例检查出来向下搜索字符串时没有减去字符串本身出现的数量,比如样例中aabc 0 3,不计重复的情况下向下搜索还要多减一下a和aa分别出现的1次: 2.第一次wa检查出来val没有在建自动机的时候赋值,所以T=1的时候…
解题方法提示 小Hi:上次我们已经学习了后缀自动机了,今天我们再来解决一个用到后缀自动机的问题. 小Ho:好!那我们开始吧! 小Hi:现在我们要对K=1..length(S)求出所有长度为K的子串中出现次数最多的子串的出现次数.小Ho你有什么想法么? 小Ho:我有一个Naive的想法.在上上周我们已经知道对于SAM中的一个状态st,endpos(st)就是st这个状态包含的子串在S中的所有结束位置(st包含所有子串都具有相同的结束位置集合).每个不同的结束位置就对应了一次出现次数.所以如果我们能…
解题方法提示 小Hi:本周的题目其实就是给定一个字符串S,要求出S的所有不同子串的数目.小Ho你知道如何快速求解么? 小Ho:我们最近在讨论后缀自动机,所以肯定是和后缀自动机有关!根据上周学习的SAM的基本概念和性质,SAM的每个状态st都包含了一部分S的子串,记作substrings(st),并且(1)对于两个不同状态u和v,包含的子串substrings(u) ∩ substrings(v) = ∅; (2)每个子串都恰好被一个状态包含.所以我们只要构造出来S对应的SAM,再对所有状态st求…
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:今天我们来学习一个强大的字符串处理工具:后缀自动机(Suffix Automaton,简称SAM).对于一个字符串S,它对应的后缀自动机是一个最小的确定有限状态自动机(DFA),接受且只接受S的后缀. 小Hi:比如对于字符串S="aabbabd",它的后缀自动机是: 其中红色状态是终结状态.你可以发现对于S的后缀,我们都可以从S出发沿着字符标示的路径(蓝色实线)转移,最终到达终结状态.例如"…