随笔分类 -  字符串

摘要:"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 阅读(185) 评论(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 阅读(143) 评论(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 阅读(282) 评论(0) 推荐(0)
摘要:"SPOJ NSUBSTR" Problem : 给一个长度为n的字符串,要求分别输出长度为1~n的子串的最多出现次数。 Solution : 首先对字符串建立后缀自动机,在根据fail指针建立出后缀树,对于n个后缀对应的节点打上标记,则每个结点对应的一些子串所出现的次数即为其子树内标记的个数,在后 阅读全文
posted @ 2017-07-21 16:57 rpSebastian 阅读(241) 评论(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)
摘要:"POJ 2778 DNA Sequence" Problem : 给m个只含有(A,G,C,T)的模式串(m include include using namespace std; const int N = 208; const int mo = 100000; int id[128]; st 阅读全文
posted @ 2017-07-17 11:29 rpSebastian 阅读(169) 评论(0) 推荐(0)
摘要:"HDU 2896 病毒侵袭" Problem : 给n个模式串,m个目标串,询问每个目标串含有哪些模式串。 Solution : 将模式串建立AC自动机,对于每个目标串,开一个数组表示每个模式串是否匹配,在AC自动机上跑一遍即可。 c++ include include include using 阅读全文
posted @ 2017-07-16 18:47 rpSebastian 阅读(211) 评论(0) 推荐(0)
摘要:"HDU 2222 Keywords search " Problem : 给若干个模式串,询问目标串中出现了多少个模式串。 Solution : 复习了一下AC自动机。需要注意AC自动机中的fail,和next的含义。fail指向了一个最长的与当前匹配出具有相同后缀的一个前缀节点,next用来转移 阅读全文
posted @ 2017-07-16 17:28 rpSebastian 阅读(178) 评论(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 阅读(694) 评论(0) 推荐(0)
摘要:Problem Palindromes and Super Abilities 2 (URAL2040) 题目大意 给一个字符串,从左到右依次添加,询问每添加一个字符,新增加的回文串数量。 解题分析 用回文自动机来做,如果新添加了一个字符,自动机中新开了一个节点,说明新增加了一个回文串。 对于每新添 阅读全文
posted @ 2016-08-07 22:02 rpSebastian 阅读(229) 评论(0) 推荐(0)
摘要:模板题。 阅读全文
posted @ 2016-07-25 17:59 rpSebastian 阅读(201) 评论(0) 推荐(0)
摘要:var n:longint; nt:array[0..200008,0..26] of longint; size,l,fa:array[0..200008] of longint; s:array[0..200008] of char; cnt,last:longint; procedure in 阅读全文
posted @ 2015-07-11 11:49 rpSebastian 阅读(283) 评论(0) 推荐(0)
摘要:求一个字符串的最小表示法。 将字符串S倍长,从根走length(s)步所走路径即为最小表示法。 记所到达位置为x,则这个最小表示法的起点为a[x]-len(s)+1 阅读全文
posted @ 2015-06-10 16:16 rpSebastian 阅读(233) 评论(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 阅读(171) 评论(0) 推荐(0)