[SPOJ7258]SUBLEX - Lexicographical Substring Search(后缀自动机)

题目描述传送门题解明明是sa的题嘛,可是为了练习sam用sam来写 sam从根到每一个点的路径都构成了一个子串,并且这些子串都是本质互不相同的 所以我们可以用拓扑序或者dfs统计一遍当前节点再往后走会有多少个不同的子串 然后询问的时候暴力枚举每一个点的每一个儿子然后找第k个就行了代码#inc...

2016-12-30 10:04:14

阅读数 501

评论数 0

[SPOJ8222]NSUBSTR - Substrings(后缀自动机)

题目描述传送门 题意:定义f(i)为长度为i的子串的最多出现次数(可重复),求f(1…n)题解很显然f(1..n)不升,那么可以用f(i)=max{f(i),f(i+1)} right集合表示当前状态在哪里出现过,其实就是求right集合的大小 主链上的所有的点right集合初始为1(因为它...

2016-12-30 08:33:31

阅读数 625

评论数 0

[SPOJ1812]LCS2 - Longest Common Substring II(后缀自动机)

题目描述传送门 题意:给出若干串,求最长公共子串。题解首先对于第一个串构建sam 对于某一个状态s,如果除第一个串之外的串匹配到此所得的最长长度是a1,a2,a3...an−1a_1,a_2,a_3...a_{n-1},那么这个状态的最长公共子串应为Min{a1,a2,a3...an−1,Ma...

2016-12-29 21:30:59

阅读数 676

评论数 0

[SPOJ1811]LCS - Longest Common Substring(后缀自动机)

题目描述传送门 题意:给出两个串,求最长公共子序列。题解后缀自动机第一题。 首先对第一个串建立sam,然后让第二个串在sam上暴力匹配,匹配不到就蹦到它的pre指针。匹配上的子串最长长度就是最长公共子序列。代码#include<iostream> #include<cstri...

2016-12-29 20:53:42

阅读数 675

评论数 0

后缀数组 学习笔记

后缀数组定义搞懂定义是学习后缀数组的关键。 子串:字符串 S 的子串 r[i..j] ,i ≤ j ,表示 r 串中从 i 到 j 这一段,就是顺次排列r[i],r[i+1],…,r[j]形成的字符串。 后缀:后缀是指从某个位置 i 开始到整个串末尾结束的一个特殊子串。字符串 r 的从 第 i...

2016-12-29 07:09:27

阅读数 990

评论数 4

[BZOJ4516][Sdoi2016]生成魔咒(后缀数组+链表||后缀自动机)

题目描述传送门题解题意实际上是求对于每一个前缀本质不同的子串个数 那么可以转化为对于每一个前缀只求包含最后一个点的和前面不重复的子串个数,然后将答案累加 把串反过来建后缀数组 然后实际上就是对于每一个后缀求与其它后缀不重复的前缀个数,也即是后缀长度减去height值 但是需要注意的一点是要...

2016-12-28 18:38:57

阅读数 714

评论数 0

[BZOJ3230]相似子串(后缀数组+二分+st表)

题目描述传送门题解题目实际上是要求最长公共前缀和后缀的长度的平方和。个人认为题目描述中a和b应该取min 把这个串正反都求一下sa和height 由于是本质不同的子串,所以每一个后缀的贡献应该是当前串刨去它和前一个的lcp的剩下的前缀 可以求出贡献的前缀和,显然满足单调性 对于每组询问,二...

2016-12-28 11:30:35

阅读数 656

评论数 3

[BZOJ3238][Ahoi2013]差异(后缀数组+单调栈||后缀自动机+树形dp)

题目描述传送门题解这道题实际上还是非常有趣的。 首先根据题目的描述答案应该为所有后缀的组合长度再减去两两的lcp 首先算出来总和 求出sa和height,用两次单调栈可以求出来以某一个点的height为最小值的最长区间 可以发现以这个点为分界点,区间的左右两边两两组合最小值一定是当前点的h...

2016-12-28 10:00:50

阅读数 605

评论数 0

[BZOJ2251][2010Beijing Wc]外星联络(后缀数组)

题目描述传送门题解首先求出来sa和height 然后其实就是暴力计算一下每一个后缀向后延伸多远。 注意要去掉重复的,也就是说要从每一个最长的那个后缀开始,并且对于每一个后缀,要从大到小合并。 时间复杂度O(nlogn+n2)O(nlogn+n^2)代码#include<iostream...

2016-12-28 09:55:24

阅读数 491

评论数 0

[POJ1226]Substrings(后缀数组+二分)

题目描述传送门题解先将 n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组。然后二分答案,再将后缀分组。判断的时候,要看是否有一组后缀在每个原来的字符串中至少出现两次,并且在每个原来的字符串中,后缀的起始位置的最大值与最小值之差是否不小于当前答案(判断能否做到不重叠)。...

2016-12-27 23:02:21

阅读数 564

评论数 0

[SPOJ220]PHRASES - Relevant Phrases of Annihilation(后缀数组+二分)

题目描述传送门 题意:给定 n 个字符串,求在每个字符串中至少出现两次且不重叠的最长子串。题解先将 n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组。然后二分答案,再将后缀分组。判断的时候,要看是否有一组后缀在每个原来的字符串中至少出现两次,并且在每个原来的字符串中...

2016-12-27 22:59:26

阅读数 474

评论数 0

[POJ3294]Life Forms(后缀数组+二分)

题目描述传送门题解将 n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求sa和height。然后二分答案,将后缀分成若干组,每一组的height都不小于mid,判断每组后缀是否出现在不小于 k=n/2+1 个的原串中。注意: ①n=1的时候要特判 ②每一个height都不能超...

2016-12-27 20:12:05

阅读数 500

评论数 0

[BZOJ3277]串(后缀数组+二分+st表)

题目描述传送门题解orz hxy sam随便艹 不过我感觉这道题用sa的做法非常厉害吖 由于每一个子串一定是某一个后缀的前缀,所以可以对于每一个后缀求其对答案能贡献多少个子串,也就是这个后缀有多少个满足题意的前缀。同时可以发现,对于同一个后缀SiS_i,如果Si,jS_{i,j}满足题意那么S...

2016-12-27 18:59:14

阅读数 887

评论数 0

[POJ3415]Common Substrings(后缀数组+单调栈)

题目描述传送门 题意:给定两个字符串 A 和 B ,求长度不小于 k 的公共子串的个数(可以相同)。题解首先把一个串接在另一个串的后面,中间放一个没出现过的字符。 由于每一个子串都是某一个后缀的前缀,求出sa和height了之后,我们可以将height分组,组内都是height>=k的后...

2016-12-26 21:20:13

阅读数 1223

评论数 0

[POJ3693]Maximum repetition substring(后缀数组+st)

题目描述传送门 题意:给定一个字符串,求重复次数最多的连续重复子串。输出满足题意的子串,如果有多个,输出字典序最小的。题解先枚举长度 L ,然后求长度为 L 的子串最多能连续出现几次。首先连续出现 1 次是肯定可以的,所以这里只考虑至少 2 次的情况。假设在原字符串中连续出现 2 次,记这个子字...

2016-12-26 11:36:16

阅读数 376

评论数 0

[SPOJ687]REPEATS - Repeats(后缀数组+st)

题目描述传送门 题意:给定一个字符串,求重复次数最多的连续重复子串。题解先枚举长度 L ,然后求长度为 L 的子串最多能连续出现几次。首先连续出现 1 次是肯定可以的,所以这里只考虑至少 2 次的情况。假设在原字符串中连续出现 2 次,记这个子字符串为 S ,那么 S 肯定包括了字符 r[0],...

2016-12-26 11:29:14

阅读数 445

评论数 0

[SPOJ705]DISUBSTR - Distinct Substrings(后缀数组)

题目描述传送门题解每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同的前缀的个数。如果所有的后缀按照suffix(sa[1]), suffix(sa[2]),suffix(sa[3]), …… ,suffix(sa[n]) 的顺序计算,不难发现,对于每一次新加进来的后缀suffi...

2016-12-26 11:24:19

阅读数 530

评论数 0

[POJ1743]Musical Theme(后缀数组||后缀自动机)

题目描述传送门题解用height搞事情。。。 某个子串一定是一个后缀的前缀。 两个后缀的最长公共前缀是在 height 数组上的区间最小值。 先二分答案,把题目变成判定性问题:判断是否存在两个长度为mid的子串是相同的,且不重叠。把排序后的后缀分成若干组,其中每组的后缀之间的 height ...

2016-12-26 11:21:07

阅读数 977

评论数 2

AC自动机 学习笔记

Q:给出一坨短串,给出一个长串,求有多少个短串在长串中出现了。 A:把短串丢进trie树,建立fail指针,把长串在trie树上匹配,暴力蹦fail即可。每一个点只会被蹦一遍,打标记即可。Q:给出一坨短串,给出一个长串,求每一个短串在长串中出现了多少次。 A:把短串丢进trie树,建立fail...

2016-12-25 10:37:45

阅读数 652

评论数 0

关于 Nim游戏与SG函数 的一点研究

引言在《博弈圣经》中博弈论的定义:我们把动物利用大自然移动的瘾魂,在决策人期待的空间里,形成三维均衡的语文学理论,称为博弈论。 博弈论又被称为对策论(Game Theory)既是现代数学的一个新分支,也是运筹学的一个重要学科。 博弈论主要研究公式化了的激励结构间的相互作用。是研究具有斗争或竞争...

2016-12-25 10:36:57

阅读数 1700

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭