
后缀自动机
文章平均质量分 61
Cymbals
Public void effect()
展开
-
[LOJ6198] 谢特(sam+字典树合并)
题目:https://loj.ac/problem/6198学习了学习了。在sam上跑一个合并,将儿子节点的可用数字合并到parent树父亲节点,在01字典树上找异或最大值,再加上当前父亲节点表示的长度来更新答案。很简单明了的一个思路,但是有一个疑问,题目要求的是最长公共前缀,众所周知倒着建sam后树上两个节点的lcp就是其lca,那么这么一路向上合并,有很多时候我们走到的不是lca了,这种...原创 2019-08-30 15:58:19 · 457 阅读 · 0 评论 -
2019HDU多校第8场1005.Acesrc and String Theory(为什么要写SAM?)
给一个串,求问有多少子串是由k个循环节组成的。似乎是一种经典的搞循环节的做法…对字符串进行枚举分块(从1到len/k枚举块的个数),然后判断有多少个连续的块是相同的。得到了一片相同的块之后,我们再把这一段向左右扩展,对这几块前面的前缀部分,与这几块的任意一部分求个lcs(最长公共后缀),lcs的长度即为可向前拓展的部分。同理,对这几块后面的后缀与任意一块求一个lcp(最长公共前缀),lcp长...原创 2019-08-16 17:09:14 · 350 阅读 · 0 评论 -
2019CCPC网络赛 1003.K-th occurrence(Sam线段树合并+倍增优化)
一句话题解:用线段树合并维护right集,对于每个串记录在sam里的位置,倍增跳到合适的节点之后在那个节点的线段树里查询kth。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5 + 5;int _, n, q, l, r, k;char s[maxn]...原创 2019-08-23 22:05:51 · 409 阅读 · 0 评论 -
牛客多校第四场 I.string(后缀自动机+回文树)
问一个串内,能选出多大的一个子串集合,满足两两子串直接互不相同而且不存在一个子串是另一个子串的反串。首先显然,重复出现的子串只能选一个,也就是只能选本质不同的子串。于是考虑将原串和其反串建立广义sam,此时原反串相同的部分全部压缩在了一起,对这个sam统计本质不同的子串个数,此时的统计结果中,符合题目条件(反串不同)的子串统计了两次(正串一次反串一次),不符合题目条件的串统计了一次。但是显然回...原创 2019-07-27 19:29:40 · 269 阅读 · 0 评论 -
2019HDU多校第一场 1006.Typewriter(后缀自动机+dp)
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 2e5 + 5;int p, q;char s[maxn];struct Sam { int next[maxn << 1][26]; int link[maxn <<...原创 2019-07-24 11:59:31 · 414 阅读 · 0 评论 -
做两道sam+线段树合并的题
mark。进度1/2#include <bits/stdc++.h>using namespace std;typedef pair<int, int> pii;typedef long long ll;const int maxn = 6e5 + 5;int n, q;string s, pp;pii cmp(pii a, pii b) { ...原创 2019-05-06 15:02:07 · 426 阅读 · 2 评论 -
华南理工大学“三七互娱杯” I.HRY and repeaters(sam+线段树合并)
题面:https://ac.nowcoder.com/acm/contest/874/I博客明天补,准备打cf,先贴代码。sam:听说你强制在线?好巧哦我就是在线的。ac代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 3e5 + 5;int n,...原创 2019-04-29 21:29:35 · 291 阅读 · 0 评论 -
2019 ICPC WorldFinal G.First of Her Name(trie上建sam/ac自动机)
In the Royal Family, names are very important! As the Royal Historian you have been charged with analyzing the patterns in the names of the Royal Ladies in the realm.There have been nn Royal Ladies, ...原创 2019-04-15 20:11:29 · 1019 阅读 · 1 评论 -
2018南京icpc M.Mediocre String Problem(exKMP or SAM)
题目:给串s和串t,求从s中取一个子串,再和t的一个前缀拼接起来能组成回文串的个数,要求从s取的子串比取的t的前缀长。可以用扩展kmp+回文算法做,也可以用sam替代扩展kmp,但是很难写。回文算法用马拉车和回文树都可以,但是这里要求的是“从当前位置开始有多少回文串”,马拉车的数组要经过处理才能用,回文树就可以直接用了…果然回文树各种方面都完爆马拉车,只是有点长。可以用扩展kmp求出s串的...原创 2018-12-02 15:48:02 · 672 阅读 · 1 评论 -
【男人八题】 A.String Game(后缀自动机 + sg函数)
题目:https://nanti.jisuanke.com/t/24852题目大意:给一个模式串和n个它的子串,Alice和Bob玩游戏,Alice先手,每回合任选一个子串,该回合轮到的人在它后面加一个字母,并且保证加了之后的新串仍然是模式串的子串。轮到后没办法保证上述添加要求的人输。(虽然题目没有说,但是字符集是小写字母)可以看出这其实是一个经典的n堆nim博弈,可以用每个子串的sg函数异...原创 2018-10-19 14:41:49 · 801 阅读 · 0 评论 -
讨论一下2018南京的M.Mediocre String Problem
快12点了= =。实在是忍不住想切这题,写个博客记录一下思路明天再搞(虽然这篇博客过了审核的时候我应该又开始搞了)。题目简化后是这样的,给两个串s和t,求从s中取一个子串与t的一个前缀连接后能组成回文串的个数,但是要求从s中取的子串长度要大于所选择的t的前缀。一开始漏看了后半段的条件…一想这不是sam的裸题吗,s串倒着建sam,然后t串进去走,走不动了就立马停,接着ringt集合大小搞一通。...原创 2018-12-02 15:38:50 · 802 阅读 · 0 评论 -
POJ - 1743 Musical Theme(后缀自动机)
A musical melody is represented as a sequence of N (1<=N<=20000)notes that are integers in the range 1…88, each representing a key on the piano. It is unfortunate but true that this representati...原创 2018-09-20 13:48:07 · 239 阅读 · 0 评论 -
蓝书上两道后缀数组题(Uva11107和Uva12206)的后缀自动机解法
UVA - 11107 Life Forms按字典序求出所有至少在一半字符串内出现的公共子串。朴素想法是多串以未出现字符分割,然后前推right集合,用位运算来判断当前节点被几个串更新过(这里n最大有100,ull也存不下,所以用bitset)。但是会t。猜测原因可能是自动机太大了,还要跑基数排序。用广义sam就过了。至于输出具体的子串,按字典序dfs即可。ac代码:#include...原创 2018-09-25 18:07:46 · 365 阅读 · 1 评论 -
CodeForces - 427D Match & Catch(后缀自动机)
Police headquarter is monitoring signal on different frequency levels. They have got two suspiciously encoded strings s1 and s2 from two different frequencies as signals. They are suspecting that thes...原创 2018-09-06 17:06:23 · 393 阅读 · 0 评论 -
ACM-ICPC 2018 焦作赛区网络赛 H. String and Times(后缀自动机)
题目:https://nanti.jisuanke.com/t/31717下午打的网络赛,一上来就开了这题,打算秒,结果发现题面没有给字符串长度,最后还是出题人在提问区补的,真的想打人。后缀自动机裸题,大概就是以下这两题合在一起:http://hihocoder.com/problemset/problem/1445http://hihocoder.com/problemset/s...原创 2018-09-15 18:53:01 · 799 阅读 · 0 评论 -
记录我的Sam模板
const int maxn = 100005;struct Sam { int next[maxn &amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;lt; 1][26]; int link[maxn &amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp原创 2018-08-28 12:45:54 · 473 阅读 · 2 评论 -
我终于学会了后缀自动机。
3个月前就说要学,结果真实拖到今天。 有些东西火候不到是真的学不会………….网上的教程不算多,而且大部分都是翻译作品,对自动机内各个部位的叫法五花八门,比如自动机里虚边,就有叫link(后缀链接),pre指针,fa数组(我真的不知道fa是什么的缩写)的,记录步数的有叫len的,step的(这俩倒是好理解),状态转移的有叫next的,叫trans的还有叫ch数组的(再次对大佬的起名能力感到震惊...原创 2018-08-15 23:46:07 · 5844 阅读 · 20 评论