后缀自动机感觉好万能 tries图和ac自动机能做的,后缀自动机很多也都可以做 这里的循环匹配则是后缀自动机能做的另一个神奇功能 循环匹配意思就是S是abba, T是abb 问'abb', 'bba','bab'在S中出现过多少次. 我们先把T的末尾循环加一遍,变成abbab 然后把问题转换成,求T的每个后缀和S的最长公共子串 如果最长公共子串的长度大于等于T的长度,那么就说明这个后缀匹配成功 做法就是先对S建立一个后缀自动机,然后记录一个状态 (u, l),u表示当前在后缀自动机匹配的位置,l…
题目传送门 题意:给出一个母串,再给出n个串,问对于每个串,母串中有几个子串是可以通过循环变化得到这个串. 思路:对母串建SAM,求出$right$集. 把匹配串复制一遍,和母串进行匹配,当匹配长度大于等于$siz$时,将当时的$p$跳到最远的$len$还大于$siz$的父串(不停的往父亲跳),答案加上$right$,然后标记一下,如果标记过的就不加.(因为此时这个p是唯一的,不会被重复计算) #include<bits/stdc++.h> #define clr(a,b) memset(a,…
http://hihocoder.com/problemset/problem/1465 求S的循环同构串在T中的出现次数 将串S变成SS 枚举SS的每个位置i,求出以i结尾的SS的子串 与 T的最长公共子串 若长度>=|S|,说明以i结尾的S的循环同构串在T中出现过 假设最后匹配i到达了后缀自动机的a节点 沿着a的parent树以直向上走,走到离根最近的 匹配长度>=|S|的节点b b的在parent树中的子树 叶子节点个数 即为这个以i结尾的循环同构串在T中的出现次数 #include&l…
描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成的数列. 小Hi发现旋律可以循环,每次把一段旋律里面最前面一个音换到最后面就成为了原旋律的“循环相似旋律”,还可以对“循环相似旋律”进行相同的变换能继续得到原串的“循环相似旋律”. 小Hi对此产生了浓厚的兴趣,他有若干段旋律,和一部音乐作品.对于每一段旋律,他想知道有多少在音乐作品中的子串(重复便多次计)和该旋律是“循环相似旋律”. 解题方法提示 × 解题方法提示 小Hi:我们已经对后缀自动机比较熟悉了,今天我…
传送门 #1445 : 后缀自动机二·重复旋律5 题意: 给出字符串\(s\),询问字符串\(s\)中有多少不同的子串. 思路: 考虑对\(s\)建后缀自动机,那么\(\sum (len[i]-len[fa[i]])\)即为答案. 还可以考虑\(dp\),设\(dp[i]\)为从\(i\)出发不同子串的个数,那么\(dp[i]=\sum_{(i,j)\in Edge}dp[j]+1\).\(dp[1]\)即为答案. #include <bits/stdc++.h> using namespac…
搞了一上午+接近一下午这个题,然后被屠了个稀烂,默默仰慕一晚上学会SAM的以及半天4道SAM的hxy大爷. 题目链接:http://hihocoder.com/problemset/problem/1413 这个题非常的劲! 首先可以发现,每次只变换一个字符为#,所以每次答案一定会得到相应的包含#的答案,而这个方案是可以直接计算出来的. 假设是$S[i]=$#则会得到$i*(N-i+1)$的子串数. 所以每次的答案可以表示为$sum[root]+i*(N-i+1)-ans[i]$,其中$ans[…
后缀自动机三·重复旋律6 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数列. 现在小Hi想知道一部作品中所有长度为K的旋律中出现次数最多的旋律的出现次数.但是K不是固定的,小Hi想知道对于所有的K的答案. 解题方法提示 输入 共一行,包含一个由小写字母构成的字符串S.字符串长度不超过 1000000. 输出 共Length(S)行,每行一个整数,表示答案. 样例输入 aab 样例输出…
http://hihocoder.com/problemset/problem/1466 建出A串和B串的两个后缀自动机 对后缀自动机的每个状态求出sg值. 求出B串的\(sum(x)\),表示B有多少子串的sg值等于x(用拓扑序求). 对A串的每个状态,求出B串有多少子串的sg值不等于这个状态的sg值,再按拓扑序递推一下. 接下来就类似SPOJ 7258这道题了 从A串开始走,按字典序从小到大,定住A串后,根据在A串停住的状态的sg值再在B串上按拓扑序递推一次求出当前状态往后可以走出多少不等于…
一.后缀自动机基本概念的理解 1.首先后缀自动机的状态是由子串的endpos来决定的 子串的endpos是指一个子串可以在原字符串的哪些位置进行匹配, endpos构成的不同集合划分成不同的状态 关于endpos的性质: s1是s2的子串当且仅当endpos(s1)属于endpos(s2),s1不是s2的子串当前仅当endpos(s1)和endpos(s2)的交集为空 2.对于一个用endpos划分的状态,最长的子串为longest(st),最短的为shortest(st),对于任何包含于该状态…
后缀自动机五·重复旋律8 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成的数列. 小Hi发现旋律可以循环,每次把一段旋律里面最前面一个音换到最后面就成为了原旋律的“循环相似旋律”,还可以对“循环相似旋律”进行相同的变换能继续得到原串的“循环相似旋律”. 小Hi对此产生了浓厚的兴趣,他有若干段旋律,和一部音乐作品.对于每一段旋律,他想知道有多少在音乐作品中的子串(重复便多次计)和该旋律是…