04 2021 档案

摘要:【题意】 两个串的最长公共连续子串 【分析】 直接连到一起,中间加上间隔符,求height之后,二分答案判断在是否属于两个串 【代码】 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<a 阅读全文
posted @ 2021-04-27 19:46 andyc_03 阅读(37) 评论(0) 推荐(0)
摘要:【题意】 求最长回文子串 【分析】 把原字符串翻过来接到后面,中间放一个特殊字符 然后枚举每一个点作为回文串的中心,计算当前位置的后缀和对应的延长位置上的后缀的最长公共前缀 具体的:分类讨论如果i为奇数长度的中心lcp(i,n-i-1),i为偶数长度回文串的中心的一个lcp(i,n-i) 【代码】 阅读全文
posted @ 2021-04-27 19:38 andyc_03 阅读(52) 评论(0) 推荐(0)
摘要:【题意】 字符串从头开始最多有多少个重复片段 【分析】 求出nxt数组,看总长度是不是最长能重复多少的倍数,如果是则说明有循环节,总长度处于循环节长度即可 如果不能整除说明循环节只有几个 【代码】 #include<iostream> #include<cstdio> #include<cstdli 阅读全文
posted @ 2021-04-27 19:31 andyc_03 阅读(37) 评论(0) 推荐(0)
摘要:【题意】 求不相同的子串的个数 【分析】 考虑每一个后缀的前缀表示了所有的子串,有n*(n+1)/2个 减去重复的即可,也就是所有的height之和 【代码】 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring 阅读全文
posted @ 2021-04-27 19:27 andyc_03 阅读(45) 评论(0) 推荐(0)
摘要:【题意】 求重复k次可重叠子串长度 【分析】 height分组,一组内有k个后缀即可 【代码】 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using name 阅读全文
posted @ 2021-04-27 19:25 andyc_03 阅读(48) 评论(0) 推荐(0)
摘要:【题意】 求出现次数超过一半的最长子串 【分析】 把所有的串连在一起,中间放上间隔符,然后求height之后 二分答案转换为判定问题,每次按height分组,看一组中是否出现了超过一半次数即可 【代码】 #include<iostream> #include<cstdio> #include<cst 阅读全文
posted @ 2021-04-27 19:22 andyc_03 阅读(58) 评论(0) 推荐(0)
摘要:【题意】 找出最长的相似不重叠子串,这里相似定义为两个串每次字符对应的差值相同 【分析】 显然,我们可以首先讲相邻两个的差值作为新的字符串来比较,这样原问题就转换为了求最长的不重叠重复子串 先利用二分,转换为判定性问题,然后对height进行分组,大于等于mid的可以分在一组,如果这一组内的最大和最 阅读全文
posted @ 2021-04-27 18:51 andyc_03 阅读(54) 评论(0) 推荐(0)
摘要:【题意】 很容易简化,就是求断开路径两点后,两点的子树大小之积 【分析】 这种动态加边,删边的操作就很LCT 这是LCT的一类用法,维护子树信息,为什么要单独把维护子树信息拿出来说呢 因为LCT的特点,认父不认子,所以对于子树的信息维护起来是相对有一定难度的 我们多记录一个信息xsiz表示虚儿子的s 阅读全文
posted @ 2021-04-25 23:32 andyc_03 阅读(65) 评论(0) 推荐(0)
摘要:【题意】 一张无向图,每个边有两种边权,求1-n的路径中,经过两种边权最大值的和最小是多少 【分析】 这道题很巧妙地模仿了生成树的思想,先按照一个边权b排序,然后依次加入,这样能保证每一次的bi的最大值是不用计算的,就是当前加的bi值 只要维护ai最大值最小即可,所以我们利用LC不断加边,当x,y已 阅读全文
posted @ 2021-04-25 23:22 andyc_03 阅读(72) 评论(0) 推荐(0)