后缀自动机
No__stop
这个作者很懒,什么都没留下…
展开
-
uva 719 - Glass Beads(后缀自动机)
uva 719 - Glass Beads(后缀自动机)题意:求循环同构的最小表示的起点。解题思路:这题用后缀自动机来解,牛刀杀鸡啊,我只是写写模板。。构造好sam之后,按字典序,dfs遍历,当深度达到n时,就返回当前节点的val值(也就是它的len),记录为k,那么答案就是k-n+1。#include#include#includeusing namespace std ;原创 2013-09-08 20:06:19 · 1725 阅读 · 0 评论 -
hdu 5008 Boring String Problem(后缀自动机构造后缀树)
hdu 5008 Boring String Problem(后缀自动机构造后缀树)题意:给出一个字符串s,然后每次询问一个k,求s的所有子串中,字典序第k小的是谁?多个解,则输出最左边的那个解题思路:这道题应该是为后缀树量身定制的吧。只要构造出了后缀树,然后按字典序遍历就可以得出每个节点包含的子串的字典序的范围了,而且必然是个连续的区间范围。但是我不会后缀树啊。。比赛的时候突然想到,后缀原创 2014-09-23 16:47:38 · 2430 阅读 · 0 评论 -
Codeforces Round #129 (Div. 1)E. Little Elephant and Strings
题意:给出n个字符串,问每个字符串有多少个子串至少出现在z原创 2014-08-17 09:01:39 · 1621 阅读 · 0 评论 -
Codeforces Round #244 (Div. 2)D (后缀自动机)
Codeforces Round #244 (Div. 2)D (后缀自动机)(标号为0的节点一定是null节点,无论如何都不能拿来用,切记切记,以后不能再错了)这题用后缀自动机的话,对后缀自动机的很多性质有足够深刻的理解。没想过后缀数组怎么做,因为不高兴敲。。。。题意:给出两个长度均不超过5000的字符串s1,s2,求这两个串中,都只出现一次的最短公共子串。解题思路:求的是公共子原创 2014-05-04 16:02:18 · 1468 阅读 · 0 评论 -
Codeforces round 146 C - Cyclical Quest(后缀自动机)
Codeforces round 146 C - Cyclical Quest题意:给出一个字符串s,这里我称之为母串,然后再给出n个子串,n解题思路:拿到这题,第一想法就是后缀自动机。。做法是这样的,先给母串建sam,为了解决同构问题,我们将读进来的子串复制一遍,除去最后一个字符。然后拿复制好的字串去自动机上跑,要记录的是当前能匹配的最长长度是多少,如果能匹配的长度大于等原子串长度,原创 2013-11-26 18:48:07 · 1488 阅读 · 1 评论 -
poj 3415Common Substrings (后缀自动机)
poj 3415Common Substrings (后缀自动机)题意:给出两个串,问这两个串的所有的子串中(重复出现的,只要是位置不同就算两个子串),长度大于等于k的公共子串有多少个。解题思路:第一个真正意义上独立完成的后缀自动机。。我们这样做,先给第一个串建好sam,然后用第二个串去sam上匹配,匹配过程中,记录temp,表示s2匹配到当前位置时,能匹配的最大长度,假设此时匹配到sam原创 2013-09-19 14:48:20 · 2454 阅读 · 0 评论 -
spoj 8222 Substrings (后缀自动机)
spoj 8222 Substrings题意:给一个字符串S,令F(x)表示S的所有长度为x的子串中,出现次数的最大值。求F(1)..F(Length(S)) 解题思路:我们构造S的SAM,那么对于一个节点s,它的长度范围是[Min(s),Max(s)],同时他的出现次数是|Right(s)|。那么我们用|Right(s)|去更新F(Max(s))的值。那么现在的问题是如何快速求 |rig原创 2013-09-17 19:31:09 · 1426 阅读 · 0 评论 -
spoj 7258 Lexicographical Substring Search (后缀自动机)
spoj 7258 Lexicographical Substring Search (后缀自动机)题意:给出一个字符串,长度为90000。询问q次,每次回答一个k,求字典序第k小的子串。解题思路:构造出sam后,类似splay求前驱的做法,不断的逼近答案。我们知道,sam里从s走到某一节点即为一个子串,所以我们在每个节点下记录一个cnt,表示该节点下,能走到的节点有多少个。那么我们在原创 2013-09-18 14:11:59 · 1499 阅读 · 0 评论 -
hdu 4436 str2int (后缀自动机)
hdu 4436 str2int (后缀自动机)题意:给出n个数字,数字很长,用字符串读入,长度总和为10^5。求这n个字符串的所有子串(不重复)的和取模2012 。解题思路:后缀自动机。。因为要处理所有不同的子串,所以想到后缀自动机。将所有的串一个个建进去,用一个10去间隔开来。建好之后,我们要统计和了。后缀自动机有这样一个性质,从s出发,到达所有节点的路径的集合,即所有该串的不相同的子原创 2013-09-16 20:33:35 · 1299 阅读 · 0 评论 -
spoj 1811 Longest Common Substring (后缀自动机)
spoj 1811 Longest Common Substring (后缀自动机)题意:lcs。。求两个字符串的最长公共连续子串解题思路:后缀自动机解法。对第一个字符串构造sam,将第二个字符串的字符依次加入sam去匹配。假如我们匹配s2[i]时,匹配到的最大值为temp,在sam上匹配到的位置为p,那当加入s2[i+1]时应该如何更新呢?显然,如果p有指向s2[i]的儿子,temp[i原创 2013-09-12 15:29:25 · 1302 阅读 · 0 评论 -
hdu 4622 Reincarnation (后缀自动机)
hdu 4622 Reincarnation (后缀自动机)题意:给出一个字符串,最长2000,q个询问,每次询问[l,r]区间内有多少个不同的字串。解题思路:之前写过一个后缀数组的解法http://blog.csdn.net/no__stop/article/details/9669325。这几天学了下后缀自动机,所以拿出来写了一下。具体是这么做的。首先我们要知道后缀自动机的一个性质原创 2013-09-10 19:16:20 · 1504 阅读 · 0 评论 -
Sevenk Love Oimaster(trie,MAP后缀自动机)
题意:给出n个串,再m个询问,每次询问一个串s,问给出的n个串中,子串包含s的有几个解法:给这n个串建立trie,再将trie建成sam,然后我们要知道的是,对于每一个状态u所表示的子串,被几个串包含,这里跟http://blog.csdn.net/no__stop/article/details/38611209这题的处理方法类似,不再赘述。然后询问的串,就去sam上匹配,匹配到哪个节点,就原创 2014-11-01 13:19:07 · 1281 阅读 · 0 评论