
后缀自动机
Fat_tu
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
BZOJ4566:[HAOI2016]找相同字符(广义SAM)
题面题意:给你两个字符串,在两个字符串中各取出一个子串,问使得这两个子串相同的方案数。两个方案不同当且仅当这两个子串中有一个位置不同。字符串只会SAM的我终于找到了1道一眼题。将两个串建出广义SAM,每个状态对于两个串分别求出一个Right集, 记为r1与r2。每个状态的贡献就为r1∗r2∗(max−min+1)r1*r2*(max-min+1)。而对于广义SAM,我的XJB原创 2017-12-20 17:08:12 · 535 阅读 · 0 评论 -
洛谷T24438:精灵飞蝇(后缀自动机+线段树)
一上午才想出来,因为睡午觉(看《恋如雨止》)而失去了小礼物不知什么时候会消失的题面 题意:一个长100的短串,一个长50000的长串 要求支持长串某个位置修改,问长串[l,r]与短串的最长公共子串 修改不多于5000假如没修改 考虑什么信息可以得出答案 维护f[l]=rf[l]=rf[l]=r表示长串每个l最大的r使得[l,r]是短串的子串显然f单调不降 对于询问[l,r]...原创 2018-03-19 16:27:49 · 347 阅读 · 0 评论 -
洛谷P1117:[NOI2016]优秀的拆分(后缀自动机)
题面 会打哈希就够了,想正解就走远了#include <iostream>#include <fstream>#include <algorithm>#include <cmath>#include <ctime>#include <cstdio>#include <cstdlib>#inclu原创 2018-03-22 15:19:26 · 416 阅读 · 0 评论 -
BZOJ4180:字符串计数(后缀自动机+Floyd+倍增+二分)
这题是打错题号找到的 题面 题意:给出一个串,用它的子串前后拼接来生成串 问所以长为n的串最少拼接次数的最大值拼接次数最少就要求每个子串都要是极长的 即它不能和后一个子串的任何前缀形成新的子串由于子串的某种性质,所以只和首字母有关 即它不能和后一个子串的首字母形成新的子串 在后缀自动机表现为该状态没有对应儿子由于要拼接次数最大,故每个状态要在关注首字母的情况下取最短 设f...原创 2018-03-09 21:41:58 · 458 阅读 · 0 评论 -
BZOJ1396:识别子串(后缀自动机+单调队列)
题面 题意:给出一个串串,对于每个位置 求包含每个位置的,最短的,只出现一次的子串的长度由区间的套路,只要求出以每个位置为L,最小的R,设为f[L]f[L]f[L]显然fff单调不降在后缀自动机上,考虑Right集大小为1的状态T 发现f[1]到f[dep[T]−Min(T)+1]f[1]到f[dep[T]−Min(T)+1]f[1]到f[dep[T]-Min(T)+1]可用de...原创 2018-03-14 20:13:17 · 339 阅读 · 0 评论 -
HDU5659:CA Loves Substring(后缀自动机)
题面 题意:一个字符集0~9的串,将第i个字符和i+1个字符分开,得到两个串。 问这两个串中有多少个不同的子串。对于每个i都要知道答案。看到切开成两个,很自然地去考虑少了哪些串 设f[i]为切开位置为i时所少的串的个数 (大佬们说得好,正难则反)先用SAM求出总数 少的串显然是每次出现都跨过了i的。对于每次出现,当然就是Right集所反映的。对于长度为len的子串x R原创 2018-01-19 15:58:56 · 425 阅读 · 1 评论 -
bzoj3676:回文串(manacher+SAM的parent树上倍增)
模拟考是碰到的,以前听过但没有做过,当场推出来了。 题面 题意就是给你一个串,定义字串的得分为长度*出现次数,问所有回文串中的最大得分。 题目分析:回文串当然首推manacher算法,只有当右指针右移时才会出现本质不同的回文串,得到该串的l和r,然后就是统计该串出现次数,很水的的我只会SAM了。 SAM的每个状态的所有串互为后缀,还记下原创 2017-08-11 14:50:25 · 556 阅读 · 0 评论 -
UVALive4671(FFT/NTT+后缀自动机/哈C)
题面 题意就是给你两个仅包含字符‘a’和‘b’的字符串X,Y,长度汉明距离指的是两个长度相等的字符串,对应位置有多少个不同字符。首先想下暴力的算法。 设X串下标为0-n,Y串下标为0-m,设F[i]表示X[i..i+m]与Y的汉明距离,很显然就是这样的: f[i]=∑j=0m[x[i+j]==y[j]]f[i]=\sum_{j=0}^m[ x[i+j]==y[j] ] 这条式子在看起原创 2017-08-16 15:56:51 · 680 阅读 · 0 评论 -
bzoj4516(后缀自动机+map)
题面 题意就是不断往一个空串里插入字符,输出每次插入后有多少个不同的字串。看到它这个是在线插入字符,我就只能想到后缀自动机了。 后缀自动机是以Right集为状态的数据结构。Right集要么不交要么包含构成树形结构,且还能证明状态数是线性的。 每个状态代表了一些互为后缀的字串,且有两个属性,Min和Max,表示这个状态代表的字串的长度区间,显然Max-Min+1就是这个状态的贡献。这里原创 2017-08-28 14:16:14 · 370 阅读 · 0 评论 -
BZOJ3879:SvT(后缀自动机+虚树)
日更两篇,真刺激。题目 题意:给出一个串,若干个询问。每个询问给出一些后缀,问它们两两之间LCP的长度和。后缀数组的写法太简单显然了,把后缀按顺序拿出来,只用一个单调栈就可以了,但我并不会…所以就是SAM了。经过一轮求后缀LCP模型在SAM上乱套,发现就是反串建SAM,得到后缀树。后缀树上结点的LCA的长度就是LCP长度。对于这里,把询问给出的结点在后缀树上建出虚树,每个点算贡献即可原创 2017-11-08 21:58:05 · 409 阅读 · 0 评论 -
BZOJ3277:串(后缀自动机+乱搞)
题面 题意:n个串,问每个串有多少个子串在至少k个串中出现建出广义sam,对于每个状态 求出parent树上的子树有多少个来自不同串的节点 大于k的可以贡献答案具体实现就是乱搞#include <iostream>#include <fstream>#include <algorithm>#include <cmath>#i...原创 2018-03-21 19:59:44 · 892 阅读 · 0 评论