随笔分类 - 字符串
摘要:序列自动机板子题啊。
阅读全文
摘要:题目描述 题解: 广义$SAM$+倍增+线段树合并三连。 对于给出的$m$个串建广义后缀自动机,用线段树合并处理$parent$树子树内所有串出现次数。 将询问挂在第$pr$位上。 最后扫一遍原串,记录当前节点以及当前串长,在$parent$树上倍增找$s[pl,pr]$串,最后用线段树查询就好了。
阅读全文
摘要:众所周知$FFT$是一个功能多但是不开$O2$常数吓人的算法。 这里介绍一下$FFT$如何搞字符串匹配。 其实我第一次是字符暴力匹配$52$次,结果$T$了一下午。 后来上网找发现有个更好的算法。 如果有两个数判相等,我们可以相减,判断是否为$0$; 但是字符串匹配相当于多对数判相等,相减加和肯定不
阅读全文
摘要:题目描述: 给一个文本串和一个模式串,模式串中有通配符$'?'$, 问匹配多少次,哪里可以匹配。 题解: 极为暴力,$FFT$单字符匹配$26$次,总计$26*3=78$次$FFT$。 其实有更好的方法我放在下一篇博客里 代码:
阅读全文
摘要:题目描述 题解: 能看出来的是,每一组数只能改最后一位,所以前$7$位动不了。 所以$KMP$跑一跑。 重点在于最后一位怎么搞。 如果$KMP$跑完了还没找到合适的位置,直接$puts("No")$就好了。 剩下个匹配问题。 (要不是数据范围拦着我我都想建图跑费用流了) 这个匹配可以用$FFT$求。
阅读全文
摘要:题目描述: 你要用ATGC四个字母用两种操作拼出给定的串: 1.将其中一个字符放在已有串开头或者结尾 2.将已有串复制,然后reverse,再接在已有串的头部或者尾部 一开始已有串为空。求最少操作次数。 len<=100000 题解: PAM+dp。 先建出PAM,然后对于每一个偶树上的串,满足:
阅读全文
摘要:题目描述 题解: 建出PAM之后倍增跳查。 貌似很裸。 代码:
阅读全文
摘要:题目描述 题解: 看起来是个dp。 还需要SAM维护。 还需要单调队列优化。 代码:
阅读全文
摘要:题目描述 题解: 这篇题解是关于manacher+SAM的。 PS.PAM已更新。 因为我还不会回文自动机我会学的 SAM支持给出一个串,求出现次数。 manacher支持找回文串。 然后放在一起,当每个节点回文半径扩展时查询。 这样时间是O(n^2)的。 为了时间,我们可以O(nlogn)预处理每
阅读全文
摘要:题目描述 题解: 最开始我想倒建倒查,结果发现需要另开线段树维护,结果算法退化了…… 说正解。 正建正查。 线段树合并+SAM。 将询问串放在SAM中,判断是否有匹配。 然后设定边界就可以了。 代码:
阅读全文
摘要:题目描述 题接: 没有任何意义的LCT+SAM。 没有题解 代码:
阅读全文
摘要:题目描述 题解: 对于多串的子串,我们可以建出广义后缀自动机。 由于本题询问的是(子串出现次数>=k)×len的总和,就将所有串扔到自动机中,爆跳pre并标记。每个点得到 一个经过次数cnt。 若cnt>=k,说明这个点压缩的所有子串都可以作为答案串。 然后处理出每个点到根的树链上所有点的答案。 代
阅读全文
摘要:题目描述 题解: 好神啊 建出后缀自动机,然后处理每个点parent树子树中endpos的数量,若为1即可成为识别子串。 对于每个点维护原串所在位置以及right的最小值mn。 然后套上线段树维护区间最小值。 基本就这样了。 代码:
阅读全文
摘要:题目描述 题解: 对于所有n串建广义后缀自动机。 (广义后缀自动机唯一区别就是每次将las附成1,并不需要在插入时特判) 建完后再建出parent树,然后用dfs序+树状数组搞区间不同种类。 其实就是HH的项链+广义后缀自动机。很水的。(虽然我调了半个晚上) 代码:
阅读全文
摘要:题目描述 题解: 鉴于子串我们很容易想到后缀自动机。 先建后缀自动机,然后处理单点价值以及对于每个点的总价值。 T=0要求去重,此时单点价值为1; T=0要求不去重,此时单点价值为parent树上endpos的数量。后缀的前缀就是子串。 由于建成的后缀自动机有向无环,我们可以O(n)时间处理每个点的
阅读全文
摘要:bzoj 题解: 后缀数组+RMQ 有一个性质是,若出现ABA形式,且|A|比较大|B|<=m,那么真正的B块端点可以来回滑动。 因此我们可以正反做两遍后缀数组,利用RMQ求出区间最小值即前缀长。 然后先枚举|A|,再枚举左边A的端点,这样ABA位置大体确定。 然后在两个左端点处分别向两端延伸,更新
阅读全文
摘要:题目描述: 题解: 先见出Trie图,然后bfs出所有状态。 我们按照字典序遍历,只要找到合法串直接跳出。这样可以保证长度最小+字典序最小。 代码:
阅读全文
摘要:题目描述: Fish是一条生活在海里的鱼。有一天他很无聊,就到处去寻宝。他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进。 通过翻阅古籍,Fish 得知了这个密码的相关信息: 该密码的长度为N。 密码仅含小写字母。 以每一个字符为中心的最长回文串长度。 以每两个相邻字符的间隙为中
阅读全文

浙公网安备 33010602011771号