
后缀自动机
Mys_C_K
人生有许多道:曾经踏足的是道,即将踏往的也是道,那什么才是道呢?唯有脚下走的才是道。一切精神或者物质都归于虚无,然后从混沌中衍生出三万道。在悲喜间涉足一条无数前人经历过,且将有无数后人奔赴的道,无论是否已经或者将要到达彼岸,然后便不再回头或是左顾右盼,即使有些道繁盛至极,夜灯如昼,无数人一浪又一浪的涌去,造就了世人皆知的辉煌;即使有些道草木凋敝,荒草丛生,只等勇敢的开拓者斩开荆棘,创造一片天地;这些都无所关,无所在意,彼岸何如、来日何方甚至过往旧事都化作一缕云烟,飘渺碧霄,我自撷高山之月色,独随足落处往行。
展开
-
[学习笔记] 后缀自动机学习笔记
我终于会后缀自动机啦!讲义什么的网上多了去了事实上照着陈立杰老师的营员课件就能学顺便把他的指针代码改成了数组://luogu 3804#include#include#include#include#define MAXN 1000010#define MAXM 2000010#define MAX_SIG 26#define lint long longusin原创 2017-07-24 15:23:17 · 410 阅读 · 0 评论 -
[SDOI2016] 生成魔咒 - 后缀自动机
好像写过后缀自动机的题了 直接上板子把XD#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<map>#define lint long long#define N 100010using namespace ...原创 2018-04-12 11:18:42 · 201 阅读 · 0 评论 -
bzoj 3796 Mushroom追妹纸 - 后缀自动机
对第一个串建SAM在上面跑第二个串,最后每个节点不能包含第三个串即可。#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define rd(s,n) scanf("%s",s+1),n=(int)strlen(s+1)#define N 12...原创 2018-08-03 08:10:31 · 264 阅读 · 0 评论 -
bzoj 3998 弦论 - SAM
SAM入门题#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<vector>#include<queue>#include<assert.h>#define pb push_back#de原创 2018-08-13 15:11:59 · 188 阅读 · 0 评论 -
codeforcs 1063F. String Journey - dp -SAM - 主席树/线段树合并 - 子串定位 - 倍增
题目大意:给你一个长为nnn的字符串SSS,求最大的kkk,使得能够找出kkk个不重叠的子串t1…tkt_1\dots t_kt1…tk,使得∀i∈[1,k),∣ti∣&amp;amp;gt;∣ti+1∣\forall i\in[1,k),|t_i|&amp;amp;gt;|t_{i+1}|∀i∈[1,k),∣ti∣&amp;gt;∣ti+1∣,并且ti+1t_{i+1}ti+1是tit_iti的子串。n≤...原创 2018-10-16 13:23:23 · 323 阅读 · 0 评论 -
[2017 山东一轮集训 Day5]LOJ 6071 字符串 - SAM - 拓扑排序
题目大意:给你n个小写字符串s1…sns_1\dots s_ns1…sn,问有多少字符串ttt是可接受的。一个串t是可接受的当且仅当存在t=p1+⋯+pnt=p_1+\cdots+p_nt=p1+⋯+pn,满足pip_ipi是sis_isi的子串。题解:显然对每个串构造SAM,每个节点若不存在字符c的出边就向后面第一个初始节点有c出边的SAM的的初始节点的c出边连边然后跑一个拓扑排序...原创 2019-03-13 16:45:23 · 478 阅读 · 0 评论 -
重复子串(string) - SAM - 启发式合并 - 线段树
题目大意:给一个字符串多次询问一个子串s的权值。一个字符串的权值定义为最长的出现了至少两次的子串的长度。n,m≤105n,m\le10^5n,m≤105。题解:考虑把串反过来,建SAM。显然询问要先二分一波。那就是求对应下标在某个区间内的点是否存在两个点其LCA的val大于等于二分的值。考虑哪些点对有可能成为答案,显然如果有三个前缀下标a,b,c满足a<b<c(设ps(a)表示前...原创 2019-04-16 16:33:39 · 464 阅读 · 0 评论 -
「NOI2016」优秀的拆分 - SAM
一类处理字符串相交的好东西。题目就是要对每个位置求一整个位置为结尾/开头的能写成SS的串的数量。除了一些麻烦的算法以外(比如在SAM上启发式合并之类的),一个简单的做法是枚举S的长度,不妨设为d,然后将原串每d个字符切开,发现SS这个串至少碰到两个缝隙,因此计算相邻两段的lcp/lcs就可以知道SS的结尾在某一段中合法的区间,然后用差分维护答案即可。#include<bits/stdc...原创 2019-05-02 20:41:42 · 664 阅读 · 0 评论