后缀自动机
文章平均质量分 75
neither_nor
这个作者很懒,什么都没留下…
展开
-
BZOJ4516 [Sdoi2016]生成魔咒
后缀自动机裸题,建的时候直接用max维护一下本质不同子串数量即可 置于为什么在新建nq节点的时候不需要更新ans,因为写一下会发现nq,q,fa[q]的mx都被加了一次又减了一次,抵消了原创 2016-04-30 13:41:22 · 1107 阅读 · 0 评论 -
BZOJ4698 Sdoi2008 Sandy的卡片
容易发现对原序列差分并把第一个数刨除,那么所有序列的最长公共子串长度+1就是答案 后缀自动机上就可以了(后缀自动机做08年的题真的靠谱么少年!),依旧是那个不懂复杂度的算法,建出来广义后缀自动机之后每个串暴力跳fail直到到根或者这个字符串已经跳到过这个点 #include #include #include #include #include #include #include #inclu原创 2016-09-14 22:35:18 · 1060 阅读 · 0 评论 -
BZOJ3230 相似子串 后缀自动机做法
……作为一名坚定的后缀自动机党,我当然要用后缀自动机做这题-_- 这个……我发现我写题解的时候非常语无伦次,主要原因是后缀自动机那些术语除了一个max我都忘了,所以为了方便说话我们定义一些东西 我们知道每个节点上(你理解为边上当然也可以的)有一个字符串,那么我们把这个字符串叫做a[x],这个字符串的长度叫做max[x],然后从根到一个点的路径能代表max[x]个字符串,我们把这些字符串叫做b[原创 2016-09-19 16:01:25 · 569 阅读 · 0 评论 -
BZOJ4556 [Tjoi2016&Heoi2016]字符串
恩,我们进行一些瞎YY,首先询问s[a~b]的所有子串与S[c~d]的最长LCP其实相当于询问s[a~b]的所有后缀与s[c~d]的最长LCP 进一步转化设suf[i]表示S的从第i个字符开始的后缀,则其实相当于询问这个 可以把d-c+1提到外面,就变成 这样只需要考虑左面的,考虑若答案为l(lb-l+1的位置,而在a=l,那么s[i~b]就是一个与s[c~d]有长度为l的LCP的子原创 2016-06-14 10:10:42 · 1440 阅读 · 0 评论 -
BZOJ2806 [Ctsc2012]Cheat
做个广义后缀自动机,这样可以在每个位置找到他往前最多能匹配多长,设为len 二分L,考虑判定L可不可行 dp,f[i]表示到第i个位置最多能匹配上多少个字符,则 最后判断f[n]是否大于0.9*n 单调队列优化一下即可 #include #include #include #include #include #include #include #include #include #inc原创 2016-07-06 09:58:36 · 831 阅读 · 0 评论 -
BZOJ4199 [Noi2015]品酒大会
建一个后缀树,dfs一遍维护子树里有多少个后缀,子数内最大次大最小次小,用siz[x]*(siz[x]-1)/2可以更新mx[fa[x]]+1~mx[x]这段的选法,用max(mx1[x]*mx2[x],mn1[x]*mn2[x])可以更新mx[fa[x]]+1~mx[x]这段的最大值,拿个线段树维护一下,然后爬一遍线段树就可以了 感觉自从学会了后缀数组半个月之后学会了后缀自动机就再也没打过后缀原创 2016-06-16 19:09:37 · 590 阅读 · 0 评论 -
BZOJ3879 SvT
Orz PoPoQQQ 大爷 造个后缀树,跑虚树,很裸的题 模数过大需要快速乘,每次被乘数*2,乘数如果这位是1则把答案加上当前被乘数 不过discuss说不模也行? #include #include #include #include #include #include #include #include #include #include #include #include #inc原创 2016-05-26 22:03:31 · 921 阅读 · 0 评论 -
BZOJ4545 DQS的trie
造一个广义后缀自动机,LCT维护即可,询问1可以在插入的时候直接维护 #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define MAXN 2000原创 2016-04-30 13:25:57 · 878 阅读 · 0 评论 -
BZOJ4566 [Haoi2016]找相同字符
看一眼题,觉得和3473好像啊,然而3473我还没做呢…… 造一个广义后缀自动机,siz开成二维把两个串的siz分开来算,每个节点对答案的贡献为(mx[x]-mx[fa[x]])*siz[0][x]*siz[1][x] #include #include #include #include #include #include #include #include #include #includ原创 2016-04-29 13:23:07 · 1569 阅读 · 0 评论 -
BZOJ2780 [Spoj]8093 Sevenk Love Oimaster
啊……建个广义后缀自动机搞搞就行了,好像也不需要树状数组dfs序什么的啊 每个串暴力跳一遍,不跳这个串跳过的点就好了 复杂度好像是对的?但是我不会证,不过好多题都这么过掉了 #include #include #include #include #include #include #include #include #include #include #include #include #i原创 2017-02-28 07:28:20 · 621 阅读 · 0 评论