随笔分类 -  字符串 后缀自动机

摘要:"BZOJ3926 诸神眷顾的幻想乡" Problem : 给一个n个节点的树(n using namespace std; const int N = 1e5 15 2; vector eg[N]; int cl[N]; int deg[N]; int n, c; struct Suffix_Au 阅读全文
posted @ 2017-09-21 21:03 rpSebastian 阅读(184) 评论(0) 推荐(0)
摘要:"HDU 4436 str2int" Problem : 给若干个数字串,询问这些串的所有本质不同的子串转换成数字之后的和。 Solution : 首先将所有串丢进一个后缀自动机。由于这道题询问的是不同的子串之间的计数,不涉及子串的数目,因此考虑用后缀链即后缀自动机的nt转移数组来做。首先将所有节点 阅读全文
posted @ 2017-07-24 19:38 rpSebastian 阅读(371) 评论(0) 推荐(0)
摘要:"HDU 4622 Reincarnation " Problem : 给一个串S(n include using namespace std; const int N = 2008; const int INF = 2000000008; struct suffix_automanon { int 阅读全文
posted @ 2017-07-22 20:46 rpSebastian 阅读(150) 评论(0) 推荐(0)
摘要:"POJ 3518 Boring " Problem : 给一个串S,询问串S有多个子串出现至少两次且位置不重叠。 Solution : 对S串建立后缀自动机,再建立后缀树,dfs一遍统计处每个结点的子树中最长节点max和最短节点min。枚举一遍后缀自动机的节点,那么对于其对应后缀的长度要求为小于等 阅读全文
posted @ 2017-07-22 19:54 rpSebastian 阅读(142) 评论(0) 推荐(0)
摘要:"POJ 3415 Common Substrings " Problem : 给两个串S、T (len include using namespace std; const int N = 200008; struct edge { int v, nt; }; struct Suffix_Auto 阅读全文
posted @ 2017-07-22 19:48 rpSebastian 阅读(306) 评论(0) 推荐(0)
摘要:"HDU 4416 Good Article Good sentence " Problem : 给一个串S,和一些串T,询问S中有多少个子串没有在T中出现。 Solution : 首先对所有的T串建立后缀自动机,统计出本质不同的子串个数ans1,再将S串插入后缀自动机,统计出本质不同的子串个数an 阅读全文
posted @ 2017-07-21 17:42 rpSebastian 阅读(526) 评论(0) 推荐(1)
摘要:"SPOJ SUBLEX " Problem : 给一个长度为n的字符串,要求输出字典序第k小的子串。 Solution : 首先对字符串建立后缀自动机。从根节点开始根据nt数组即后缀链进行一边dfs记忆化搜索,预处理出当前状态下之后还能形成的字符串数量。对于每一个询问,从小到大枚举每一位的每个字母 阅读全文
posted @ 2017-07-21 17:01 rpSebastian 阅读(281) 评论(0) 推荐(0)
摘要:"SPOJ NSUBSTR" Problem : 给一个长度为n的字符串,要求分别输出长度为1~n的子串的最多出现次数。 Solution : 首先对字符串建立后缀自动机,在根据fail指针建立出后缀树,对于n个后缀对应的节点打上标记,则每个结点对应的一些子串所出现的次数即为其子树内标记的个数,在后 阅读全文
posted @ 2017-07-21 16:57 rpSebastian 阅读(240) 评论(0) 推荐(0)
摘要:"SPOJ LCS2" Problem : 给若干个串,询问这些串的最长公共子串。 Solution : 对第一个串建立后缀自动机,对于之后的每个串在后缀自动机上进行匹配。每个节点记录当前串所匹配到的长度以及所有串所匹配到的长度最小值,需要注意的是如果一个串在某个节点匹配成功,那么其fail到根的路 阅读全文
posted @ 2017-07-21 14:13 rpSebastian 阅读(234) 评论(0) 推荐(0)
摘要:"SPOJ LCS" Problem : 给两个串S、T,询问两个串的最长公共子串。 Solution : 复(yu)习(xi)了一下后缀自动机。后缀自动机一定要结合后缀树来理解呀 !!!后缀自动机的fail指针实现了原串的逆序的后缀树,后缀自动机的nt转移数组相当于后缀树上的后缀链。 C++ in 阅读全文
posted @ 2017-07-21 12:14 rpSebastian 阅读(217) 评论(0) 推荐(0)
摘要:Problem Jong Hyok and String 题目大意 给你n个字符串,有q个询问。 定义set(s)={(i,j)} 表示 s在第i个字符串中出现,且末尾位置为j。 对于一个询问,求set(Qi)=set(t) ,t的数量。 (n,q<=10^5 , 字符串总长<=10^5) 解题分析 阅读全文
posted @ 2016-08-16 22:53 rpSebastian 阅读(691) 评论(0) 推荐(0)
摘要:模板题。 阅读全文
posted @ 2016-07-25 17:59 rpSebastian 阅读(201) 评论(0) 推荐(0)
摘要:求一个字符串的最小表示法。 将字符串S倍长,从根走length(s)步所走路径即为最小表示法。 记所到达位置为x,则这个最小表示法的起点为a[x]-len(s)+1 阅读全文
posted @ 2015-06-10 16:16 rpSebastian 阅读(232) 评论(0) 推荐(0)
摘要:用后缀自动机统计出出现1~n次的串的数量f[i] 对于ans[k]=sigma(f[i]*C(i,k)) i>=k 阅读全文
posted @ 2015-06-10 11:21 rpSebastian 阅读(314) 评论(0) 推荐(0)
摘要:http://blog.sina.com.cn/s/blog_7812e98601012cim.html //后缀自动机建立的详细介绍 http://www.tuicool.com/articles/Mjuu2y //后缀自动机学习指南(习题列表) 阅读全文
posted @ 2015-06-10 08:44 rpSebastian 阅读(170) 评论(0) 推荐(0)
摘要:1 var s,t:ansistring; 2 n,op:longint; 3 p:array[0..2000008] of longint; 4 procedure pre; 5 var i:longint; 6 begin 7 s:='$*'; 8 for i:=1 to length(t) do 9 begin 10 ... 阅读全文
posted @ 2015-05-18 17:35 rpSebastian 阅读(194) 评论(0) 推荐(0)
摘要:AC自动机模板题。 被卡内存了 死活A不掉。。 AC自动机参考教程: http://www.cppblog.com/menjitianya/archive/2014/07/10/207604.html 阅读全文
posted @ 2015-05-08 10:49 rpSebastian 阅读(203) 评论(0) 推荐(0)
摘要:var s:ansistring; cas:longint; function minp(st,len:longint):longint; var p1,p2,k,tmp:longint; begin p1:=0; p2:=1; k:=0; while ((p1p2) then exit(p2+st) else exit(p1+st); end; begin re... 阅读全文
posted @ 2015-04-28 10:19 rpSebastian 阅读(231) 评论(0) 推荐(0)