后缀自动机做题记录

目录

  • 后缀自动机做题记录

    • sp1811
    • sp1812
    • sp10570
    • luogu 2463
    • CF873F
    • TJOI2015 弦论
    • AHOI2013 差异
    • HEOI2016/TJOI2016 字符串
    • HAOI2016 找相同字符
    • SDOI2016 生成魔咒
    • ZJOI2015 诸神眷顾的幻想乡
  • 留坑待填
    • 广义SAM
    • 其他
    • NOI原题练习

后缀自动机做题记录

来填之前的坑了。。。考后大概会做做有字符串的综合题吧

sp1811

lcs板子,对于第一个串建出SAM,第二个串在上面跑,即可求出对于每一个位置的后缀的最大匹配长度

sp1812

n串lcs板子,对于每个节点去min即可,但是要注意到当前答案对parent子树上儿子答案取max

sp10570

上面的那个改个多组数据,水水经验 (两分钟获得快乐不是很划算吗

luogu 2463

上面那个的变形,加个差分,数据贼小,输入处理有 丶难敲

CF873F

如何求出每个点的right集合大小? dfs求size即可,对于原串上的点sz初值为1

也可以基数排序求出拓扑序然后倒序求

此题中对于被禁止的点sz处理一下就行了

TJOI2015 弦论

对于每个点,算多次的sz为right集合大小,算一次的sz为1

然后像平衡树上那样递归找就行了,复杂度O(n)

AHOI2013 差异

考虑\(parent\)树上每条边的边权赋为\(len(i)-len(fa_i)\),这样两个节点的贡献就是他们到lca的路径权值和,答案是所有路径权值和

然后考虑有多少条路径经过当前边就可以了

HEOI2016/TJOI2016 字符串

考虑二分答案,即为前缀长度,倍增到对应的SAM的点,check一下当前点的endpos是否有包含[a,b],在parent树上线段树合并预处理出来即可

HAOI2016 找相同字符

考虑把两个拼接起来,parent树上每个节点代表一些字符串,且他们出现的位置是等价的

就可以记录一下在A/B中出现的位置然后统计一下

SDOI2016 生成魔咒

先考虑一个问题:如何用SAM求本质不同的子串个数?

和上面差不多,在parent树上每个点代表一些字符串,且不会重复,每次新加入的点算一下就可以了,拆点不会影响答案

注意此题字符集比较大,用map存出边

ZJOI2015 诸神眷顾的幻想乡

trie树上SAM,参考刘研绎在2015年写的国集论文

留坑待填

要准备NOIP了(悲

广义SAM

就是每次把last拉到1

cf666e

p4081

其他

scoi2012

NOI原题练习

你的名字

品酒带会

原文地址:https://www.cnblogs.com/lcyfrog/p/11650168.html

时间: 2024-10-09 23:31:17

后缀自动机做题记录的相关文章

退役前的做题记录5.0

退役前的做题记录5.0 出于某种原因新开了一篇. [CodeChef]Querying on a Grid 对序列建立分治结构,每次处理\((l,mid,r)\)时,以\(mid\)为源点建立最短路树,这样跨越\(mid\)的点对之间的最短路一定会经过\(mid\),因此两点之间的最短路径就可以描述成最短路树上的两段到根路径.对每棵最短路树处理\(dfs\)序,用树状数组维护权值修改即可. [Wannafly挑战赛4F]线路规划 类似SCOI2016萌萌哒一题,并查集\(f_{i,j}\)表示从

【BZOJ做题记录】07.07~?

在NOI一周前重开一个坑 最后更新时间:7.07 11:26 7.06 下午做的几道CQOI题: BZOJ1257: [CQOI2007]余数之和sum:把k mod i写成k-k/i*i然后分段求后面的部分就好了 BZOJ1258: [CQOI2007]三角形tri:在草稿纸上按照位置和边找一下规律就好了 BZOJ1260: [CQOI2007]涂色paint:简单的区间DP BZOJ1303: [CQOI2009]中位数图:小于中位数的改为-1大于的改为1,算一算前缀和然后哈希一下乘一乘就好

project euler做题记录

ProjectEuler_做题记录 简单记录一下. problem 441 The inverse summation of coprime couples 神仙题.考虑答案为: \[\begin{array}{c} S(n) & = & \sum_{i = 1} ^ n \sum_{p = 1} ^ i \sum_{q = p + 1} ^ i \frac {1}{pq}[p + q \geq i][gcd(p, q) = 1] \& = & \sum_{i = 1} ^

清华集训2014 做题记录

清华集训2014做题记录 已完成 [清华集训2014]玛里苟斯 [清华集训2014]主旋律 [清华集训2014]奇数国 [清华集训2014]矩阵变换 [清华集训2014]sum [清华集训2014]虫逢 [清华集训2014]玄学 [清华集训2014]文学 未完成 [清华集训2014]卡常数 [清华集训2014]简单回路 [清华集训2014]Router [清华集训2014] Breaking Bomber 写一题要膜一题题解,膜完题解膜代码,膜完代码膜指导,膜了好几天了还有四个题没做. [清华集

2020年3月做题记录

[不定时更新,赶论文,赶项目,1月~2月做题记录还在整理,自我训练] 反转链表 链接:https://leetcode-cn.com/problems/reverse-linked-list/ 类名: 考察点:链表.迭代.递归 解题过程: 力扣3月每日1题,题解链接: https://leetcode-cn.com/problems/reverse-linked-list/solution/di-2ci-da-qia-lian-biao-fan-zhuan-di-gui-by-wu-xi-/ 就

Match & Catch CodeForces - 427D 后缀自动机水题

题意: 给出两个字符串a,b,求一个字符串,这个字符串是a和b的子串, 且只在a,b中出现一次,要求输出这个字符串的最小长度. 题解: 将a串放入后缀自动机中,然后记录一下每个节点对应的子串出现的次数 然后把b串取自动机中匹配 然后判断一下 1 #include <set> 2 #include <map> 3 #include <stack> 4 #include <queue> 5 #include <cmath> 6 #include &l

Educational Codeforces Round 79做题记录

这套题感觉出的不咋滴,第四题和第五题难度差了1000分!!! 前四题都还简单,第五题就31人做出……我算了…… 懒得写题解了,做个记录吧(这就是偷懒的理由???) 比赛传送门 A.New Year Garland 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #include <vector> 6 #define re

2020年3月底到4月第1周做题记录(力扣)

写在前面的话: 多看书,整完论文,deadline驱动,加油. 做题时间: 2020年3月30日~2020年4月5日 记录: 总共道题,时间为min. 最近更新时间: 202003230 圆圈中最后剩下的数字 链接: https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/ 类名: 考察点: 环.模拟 解题过程:力扣3月每日1题 题目的意思是用n个数字形成一个圆圈,数字范围为0到n-1,数

codeforces 乱做题记录

Codeforces 590 E https://codeforces.com/problemset/problem/590/E 给 $ n $ 个只包含字符 $ a $ 和 $ b $ 的字符串,总长度不超过 $ 10^7 $,选出最多的字符串,使得其中不存在字符串 $ a $ 和 $ b $ 满足 $ a $ 是 $ b $ 的子串,输出方案,如果有多种方案,输出任意一种 $ n \le 750 $ 我们需要对每个串求出所有的比它短的是它的子串的字符串,并向其连边,可以发现这 $ n $ 个