随笔分类 - 字符串 后缀自动机
摘要:【题目】A. A String Game 【题意】给定目标串S和n个子串Ti,Alice和Bob轮流选择一个子串操作,必须且只能在子串末尾添加一个字符使得新串也是S的子串,不能操作即输,求胜利者。|S|<=10^5,n<=100。多组数据,保证Σ|S|<=3*10^7。 【算法】后缀自动机+博弈论S
阅读全文
摘要:【题意】给定只含小写字母的字符串s,定义价值为回文子串的长度*出现次数,求最大价值。n<=3*10^5。 【算法】回文树 【题解】回文树上一个点的被访问次数是其作为最长回文子串的出现次数。 将fail边反向连接建树后,每个点的子树访问次数和就是这个回文子串的出现次数,可以dfs解决。 注意:要从-1
阅读全文
摘要:【题意】给定长度为n的小写字母字符串S,求第k小子串。n<=5*10^5。 给定T,T=0时不同位置的相同子串算一个,T=1时算多个。 【算法】后缀自动机 【题解】对S建立SAM,T=0则每个节点算1次,T=1则每个节点算Right次,那么第k小就是dfs到恰好前k个的位置就是答案(SAM自带字典序
阅读全文
摘要:【题意】给定长度为n的小写字母字符串,令Ti表示以i开头的后缀,求Σ[Ti+Tj-2*lcp(Ti,Tj)],1<=i<j<=n。 【算法】后缀自动机 【题解】Σ(Ti+Tj)只与n有关,那么关键在于计算Σ2*lcp(Ti,Tj)。 对逆序串建后缀自动机,其parent树就是原串的后缀树,lcp(T
阅读全文
摘要:【题意】给定两个字符串S和T,求最长公共子串。len<=10^5。 【算法】后缀自动机 【题解】对字符串S建SAM,然后令串T在S上跑匹配。 这是自动机最原本的功能——匹配,就是串T在SAM(S)上走,不能匹配就沿失配边走,这样得到的是T上以每个字符结尾的子串中与S的最长公共子串,取Max即是答案。
阅读全文
摘要:【题意】给定长度为n和m的两个字符串S和T,要求在字符串S中取出若干段拼成T(可重复取),求最小段数,n,m<=50000。 【算法】后缀自动机 || 后缀数组 【题解】对串S建SAM,然后在上面尽可能地匹配T,匹配几次得到T就是答案。 #include<cstdio> #include<cstri
阅读全文
摘要:后缀自动机是用于识别子串的自动机。 学习推荐:陈立杰讲稿,本文记录重点部分和感性理解(论文语言比较严格)。 刷题推荐:[后缀自动机初探],题目都来自BZOJ。 【Right集合】 后缀自动机真正优于后缀树的方面在于:结合了有限状态自动机,从而实现了O(n)的时空复杂度。 trans(s,str)表示
阅读全文
摘要:把字符串原样复制一遍放在后面是惯用套路,此时字符串数组开两倍! ★字符串算法的核心是构造失配指针! 【字符串哈希】 双蛤习取模保险,毕竟连自然溢出都是能卡的…… 例题:【CodeForces】961 F. k-substrings 字符串哈希+二分 用于O(1)判断两个字符串是否相等:对于s[i~j
阅读全文
摘要:【算法】 【算法】网络流 【算法】树 【算法】数学 ————【专题】生成树计数(矩阵树定理) ————【专题】计数问题(排列组合,容斥原理,卡特兰数) ————【算法专题】卡特兰数(计数数列) ————【专题】数论 ————【专题】概率和期望 【算法】动态规划 【算法】数据结构 ————【专题】平衡
阅读全文