
后缀自动机(SAM)
文章平均质量分 68
LauZiyang
exploring
展开
-
省选专练(学习)后缀自动机SAM(超详细)
This is a SAM for string acadd先谈我对后缀自动机的理解:误解1:后缀自动机是识别字符串所有后缀的东西这不完全正确,它可以识别所有子串,于是也可以识别所有后缀误解2:这是一个nlogn的算法。错误后缀自动机极限时间复杂度是O(n*2-1)比SA和S tree优然后是后缀自动机可以干什么:可以求LCS什么?你说把他转成LIS跑nlogn...原创 2018-07-21 07:56:34 · 332 阅读 · 0 评论 -
省选专练之后缀自动机APIO2014回文串
本来是个回文自动机模板题但是也可以用后缀自动机AC掉先跑manacher这可以识别所有的回文串然后放进自动机里暴力跑就是了#include<iostream>#include<cstdio>#include<cmath> #include<algorithm>#include<cstring>using...原创 2018-08-15 21:44:23 · 182 阅读 · 0 评论 -
省选专练之后缀自动机[HAOI2016]找相同字符
因为我太菜了,我写了LCS就忘了(温故而知新的重要性啊)和LCS代码几乎一样又一个算贡献的问题now->pre的贡献为siz*(now->step-pre->step)这个时候可以预处理但是当前匹配串长度并不一定是now->step这很重要#include<iostream>#include<cstdio>#in...原创 2018-08-14 21:28:54 · 154 阅读 · 0 评论 -
省选专练之后缀自动机 [TJOI2015]弦论
这个看似模板,但是我还是没有理解透彻,毕竟写得慢还是主要比不过抄码的人。但是在ZJY巨子本色出演的题目,我还是请教了ZJY本人,我大抵是会了。这个本身有两种情况1)t=0求right集合(又叫endpos集合)2)t=1求siz集合这个都好求然后就是一个类似于可持久化线段树的查询方式了从小到大暴力减减到0或负数就退出#include<iostream...原创 2018-08-14 21:08:12 · 143 阅读 · 0 评论 -
省选专练之后缀自动机Hihocoder1457
伪广义后缀自动机利用SA的著名做法加个字符集以外的串然后把串连接起来选择':'('0'+10)然后所有parent树上不经过:边的串都是合法的然后这里是要从短串转移到长串基数排序了之后从1-siz暴力转移#include<iostream>#include<cstdio>#include<cmath>#include<c...原创 2018-08-14 21:02:07 · 200 阅读 · 0 评论 -
省选专练之后缀自动机HiHocoder1449
似乎是个SPOJ的题明显建立后缀自动机给每个np节点附上1的权重然后利用top序把所有pre更新了然后每一个暴力比较就好了而且网上的题解又一句废话就是从大到小更新一遍不可能出现长串多余短串的#include<iostream>#include<cstdio>#include<cmath>#include<cstrin...原创 2018-08-14 20:58:36 · 210 阅读 · 0 评论 -
省选专练之后缀自动机hihocoder1445
求本质不同的字符串个数两种方法:1)求right集合大小,暨parent树上一个点子树的大小,这是一个递推式,并不是指点的个数2)由step函数求因为now->step - pre->step 表示一条边的贡献,所以全部加起来就好了本题使用法2#include<iostream>#include<cstdio>#include<...原创 2018-08-14 20:50:57 · 280 阅读 · 0 评论 -
省选专练之后缀自动机JSOI2012玄武密码
我本来是准备写个ACM再开SAM的但是QwQ这个SAM太简单了啥?求得是前缀做不了?是啊我们需要前缀自动机只要你稍微有后缀自动机基础,把串直接放进自动机暴力匹配就完了#include<bits/stdc++.h>using namespace std;const int N=1e7+6e6;struct SAM{ int n,m; char S[N]...原创 2018-08-14 20:21:36 · 183 阅读 · 0 评论 -
省选专练之后缀自动机SPOJ1811LCS - Longest Common Substring
陈老师引入SAM的例题求两个串的LCS直接建一个串的SAM,并且把另外一个串放进去跳。这个方法很经典!几乎满足了所有两个串的公共串问题的所有解法有巨子说这个跳是均摊Log的,我也不知道QwQ对不对,反正SPOJ那么严苛的时间是过得了的#include<bits/stdc++.h>using namespace std;const int N=4e5+1...原创 2018-08-14 20:26:58 · 167 阅读 · 0 评论 -
和Leo一起做爱字符串/线段树的好孩子CF700E Cool Slogans
这道题愈发加深了我对right集合的理解也就是endpos集合endpos集合是指一些可以以这个点结尾的合法集合而维护使用经典的主席树按照Parent树从上向下进行树形DP使用主席树按top序合并pos集合由于树上路径一定是当前的一个后缀所以必然出现了至少一次这个时候查询posA-lenA+lenB,posB-1是否存在一个节点#include<iost...原创 2018-09-07 22:34:56 · 1422 阅读 · 0 评论