
SA/SAM
Murphyc
喵喵喵!
展开
-
牛客网暑期ACM多校训练营(第一场)I.Substring(SA|后缀数组)
I.Substring 传送门 题意:找出最大的集合内串互不同构的子串的集合的大小. 因为串内字符只存在所以我们暴力处理出原串的所有同构串,并重构一个包含原串所有同构的新串,新串的长度为原串的长度 那么对于这个问题就转化成了计算新串中不同的子串的个数,这个问题用...原创 2018-07-21 10:30:42 · 605 阅读 · 0 评论 -
国庆七天乐_day2 bzoj4566 找相同字符(广义后缀自动机)
传送门 广义后缀自动机实际上就是对于多串而言去建立后缀自动机这道题写起来很简单,我们对于两个串建立一个后缀自动机,与对于一个串去建立后缀自动机不同的是,对于第二个串,我们在线的构造后缀自动机的时候,需要去判别一下当前这个前缀是否已经为当前后缀自动机上的某一个状态.在构造后缀自动机的时候我们顺便计一下两个串分别在各个节点的访问次数,在topo之后再加上fail节点结束的个数最...原创 2018-10-02 17:40:18 · 398 阅读 · 0 评论 -
国庆七天乐_day2 bzoj3998弦论(后缀自动机)
传送门 题意:求字典序第k小的字串对于T为0的情况,每个状态我们计数都为1对于T为1的情况,对于每个状态他的计数应加上他fail树结束节点的个数(实际的对应串的个数)然后随便DFS就好了 #pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include<bits/...原创 2018-10-02 17:29:56 · 329 阅读 · 0 评论 -
国庆七天乐day2_bzoj3238 差异(后缀自动机)
传送门最开始想到的是SA RMQ预处理,不过既然在写SAM那就用SAM来解决一下这个问题 其实写起来SAM远比SA简洁 我们这样想,对于两个后缀,他的lcp的长度就是两个对应的接收态在fail树上的LCA的深度如果已经想明白了上面这点,那么对于这个问题,算得就是对于所有节点,求他的所有子节点对的LCA的sigma 在下面的代码中,除了模板部分就添加了两个数组,r...原创 2018-10-02 17:20:35 · 327 阅读 · 0 评论 -
SPOJ - DISUBSTR Distinct Substrings(SAM)
传送门题意:求本质不同的子串的个数 写这题就为了赛前测一下SAM板子,毕竟是个裸得不能再裸的裸题了,然而,居然出问题了.................. 问题出在初始化,一开始为了节省时间,是对每个节点一个一个去初始化-----fail[cnt] = -1;然而这样对于数据有多组的问题,可能就会出问题,在debug了近1h后,把这里改成了memset就过了,难受...原创 2018-10-01 17:13:37 · 232 阅读 · 0 评论 -
国庆七天乐_day1_2012 Asia Tianjin Regional Contest HDU - 4436_str2int(SAM)
传送门题意:给你多个串,求他们的所有子串中本质不同的串的和对2012取模 把所有串连起来建一个后缀自动机.对于每个节点的和而言,他实际的和应加上---------过该他子节点的次数×该节点所代表的数值+他的子节点的sum×10而实际过他这个节点的次数就更简单了,把他所有子节点的经过次数加起来就是了. 最后对所有节点求和取模即可. 这道题debug了一个...原创 2018-10-01 15:52:58 · 415 阅读 · 0 评论 -
SA模板(DA||DC3)
DA版本的SA速度相较DC3慢了些,很容易被卡,但是他在所需空间上优越于DC3#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include<bits/stdc++.h>using namespace std;using namespace std;typedef long l...原创 2018-08-17 17:54:48 · 569 阅读 · 0 评论 -
SPOJ 220 PHRASES - Relevant Phrases of Annihilation(SA)
传送门题意:给定n个串,问n个串中对于每个串都出现了至少2次的最长不重合子串. 这个其实就是对于两个串的最长公共子串稍微改一点,我们把所有串用不同的分隔符连起来,同时记录每个下标对应的串的下标,然后我们可以去二分LCP,之后我们便可以发现对于LCP(i,j)>=x的所有后缀他们肯定都是在连续的一个组里面,这个随便写个串然后打出排序后的后缀便可以直接看出. ...原创 2018-08-18 17:29:16 · 231 阅读 · 0 评论 -
SPOJ 1811 LCS - Longest Common Substring(后缀自动机)
传送门题意:如题这题其实就是SAM上跳fail的一个应用,我们一开始匹配的节点就在root,随着扔进去匹配不同的字符,我们不断的跳fail直到匹配到当前的字符,如果跳的图中pos变为-1了,即为跳回root之前的最初的未加入任何字符节点,这则表示失配,更新cnt就好了如果找到一个pos不为-1的即匹配成功,那么我们更新cnt为len[pos]和cnt中较小的那个再加一即可(加一表示...原创 2018-10-04 16:59:42 · 337 阅读 · 0 评论