![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串
hcx11333
菜鸡一枚,成长ing。。。
展开
-
HDU2609 How many(最小表示法)
题意:给n个长度100以内的字符串,如果两个字符串循环移位可以得到相等的结果,那么就认为这两个字符串相等。求这n个字符串一共包含多少个不同的字符串。思路:显然每个串循环移位得到的最小值是一定的,可以先用最小表示法处理出每个字符串的最小值,排个序,然后只需比较相邻的两个串是否相同就行了。#include#include#include#include#include原创 2017-08-16 21:02:11 · 226 阅读 · 0 评论 -
HDU5157 Harry and magic string(回文树)
题意:从一个串s中取两个回文子串,求使两个回文串互不相交的取法数。 思路:TsinsenA1393. Palisection的镜像问题,正反跑一次回文自动机,用前缀和计算贡献即可。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#...原创 2018-10-30 15:07:32 · 227 阅读 · 0 评论 -
BZOJ3676: [Apio2014]回文串 (回文树模板)
题意:求串s中每个回文串的长度与出现次数乘积的最大值。 思路:回文树裸题,求最大的cnt*len即可。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <stac...原创 2018-10-30 00:33:36 · 170 阅读 · 0 评论 -
UVALive - 7041The Problem to Slow Down You (回文树)
题意:T组样例,每组两个长度2e5的字符串a和b,求a中每个回文串在b中出现次数的总和。 思路:回文自动机中每个节点够代表一个不同的回文串,分别建立回文自动机统计出a和b中每种回文串出现的次数,然后分别从节点0和1做dfs,统计相同结点的cnt乘积即可。#include <iostream>#include <cstdio>#include <cst...原创 2018-10-30 00:30:48 · 140 阅读 · 0 评论 -
TsinsenA1393. Palisection (回文树)
题意:从一个长度n(1<=n<=2e6)的字符串中来找出两个回文子串,求这两个子串有公共位置的取法有多少种。 思路:开始想着manacher预处理,然后给每个回文串计算范围内贡献的办法,WA了之后想到类似TsinsenA1280的处理办法,通过字符串两个方向上的预处理,求出回文串不相交的方案数,再用总方案数做个减法。用qz[i]表示前i位包含的回文串数,前缀和维护即可。...原创 2018-10-30 00:25:40 · 344 阅读 · 0 评论 -
TsinsenA1255. 拉拉队排练(陶文博) (回文树)
http://www.tsinsen.com/A1255题意:一个1e6的字符串,求出长度为奇数的回文子串中长度排前K的回文串的长度之积。 思路:建回文自动机,然后遍历结点,统计长度为奇数的回文串数量,然后从长到短算出前K长的回文串长度之积就行了。#include <iostream>#include <cstdio>#include <cstr...原创 2018-10-30 00:07:29 · 243 阅读 · 0 评论 -
TsinsenA1280/BZOJ2565 最长双回文串(回文树)
题意:输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串。2≤|S|≤10^5。 思路:因为求的是双回文串的最大长度,优先找最长的X或最长的Y会出问题。所以要枚举X和Y的分界点,枚举每个位置,找出当前位置向前和向后能延伸到的最长回文串,求和更新答案。显然回文自动机可以求出以每个点为末尾向前能够延伸到的最大回文串,要解决的是求一...原创 2018-10-29 23:48:07 · 154 阅读 · 0 评论 -
URAL1960 Palindromes and Super Abilities(回文树)
题意:给一个长度1e5的串,求它的每个前缀包含的不同回文串数量。 思路:不同回文串数量正好就是回文树中节点个数-2(除去节点0和1),按顺序插入字符构造回文树,每次插入字符后的结点数就是对应前缀中的回文串种类数。#include <iostream>#include <cstdio>#include <cstring>#include <...原创 2018-10-29 23:39:35 · 213 阅读 · 0 评论 -
UVA11475 Extend to Palindrome(扩展KMP/Manacher/后缀数组)
题意:给一个长度最大100000的字母串,可在它后面任意补充字符,输出可以构成的最短回文串。思路:补充的部分要与前面形成回文,要求出来最少的情况,显然我们要先求出原串的后缀能够形成的最大回文串,然后补充剩下的前缀部分的对称串即可。最好的情况就是原串回文,不需要补充,最坏的情况是以最后一个字母为对称中心,要补充n-1个字母。求最大的回文后缀,有几种方法:Manacher:在串上跑一次...原创 2018-10-19 13:27:04 · 272 阅读 · 0 评论 -
POJ3261 Milk Patterns(二分+后缀数组)
题意:一个长度N(1<=N<=20000)的数列,找出其中至少重复了K次的最长子串,输出长度,子串可以重叠。思路:后缀数组经典应用,二分答案ans,找到满足条件的最大的长度。对于每个二分的值x,我们按照x将height值分组,同一组内超过K个位置即可。#include <iostream>#include <cstdio>#include <...原创 2018-10-19 11:44:49 · 132 阅读 · 0 评论 -
POJ3581 Sequence(后缀数组坑题)
题意:将一个长度为N(<=200000)的数组,划分成非空的三段,然后倒转每一段拼成一个新的数组(三段相对位置不变),输出字典序最小的结果。 思路:要求的就是倒转后字典序最小的结果,先倒转原数组,跑一次SA,之后后缀会按照字典序排列,我们只需要找到第一个满足sa[i]>1(因为要保证后面两段非空)的位置就行了,这就是第一段。去掉第一段后,我们需要找出剩下的部分中字典序较小的...原创 2018-10-19 11:33:58 · 155 阅读 · 0 评论 -
HDU5442 Favorite Donut(KMP+最大表示法)
题意:给一个环,要找出里面的最大的串,输出串最大时起点的下标(从1开始)和顺时针(0)还是逆时针(1)。如果有多种情况就输出最小的下标,如果顺时针和逆时针相同就选择顺时针。思路:正逆各用一次最大表示法即可。对于逆时针,因为要考虑字符串的循环对下标的影响,因此在与顺时针方向比较之前先做一次KMP,求出循环节长度。#include#include#include#incl原创 2017-08-17 17:37:11 · 195 阅读 · 0 评论 -
HDU4162 Shape Number(最小表示法)
题意:给一个串s1,只包含0到7,用它构造出一个新串s2,输出新串循环移位可以得到的最小串。构造方式:s2[i] = s1[i+1] - s1[i].如果得到的新值小于0,那么就要加8.最后一位要用第一位来减。思路:构造出新串之后最小表示法求解即可。#include#include#include#include#include#include#include原创 2017-08-16 21:37:27 · 213 阅读 · 0 评论 -
HDU5785 Interesting(manacher+差分数组)
题意:一个串s,如果存在1<=i<=j<k<=|s|,且s[i,..j]和s[j+1,..k]都是回文串,那么对结果的贡献就是i*k。求所有贡献之和。 思路:对于每个位置i,设以i为末尾的回文串的起点分别为s1,s2,...,以i+1为起点的回文串的终点位置分别为t1,t2,....,那么i位置对结果的贡献=s1 * t1 + s1 * t2 +...+ s2 * ...原创 2018-10-30 20:23:13 · 265 阅读 · 0 评论