![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串
文章平均质量分 86
lleozhang
这个作者很懒,什么都没留下…
展开
-
CF 494B 【Obsessive String】
很有趣的一道题这道题提议很难懂,其实就是让你求合法的集合数目。合法的集合定义为:1、集合中的所有串都是s的子串,且互不重叠 2、集合中的所有串都含有子串t。看到网上很多题解说要用kmp,但我就不用...因为仅需进行一个字符串匹配,而hash是很好写的匹配啊而且kmp的next指针在dp中并没有起到作用。说一下主体思路吧:设两个字符串为s,t,长度分别为l1,l2首先...原创 2018-08-16 10:02:48 · 217 阅读 · 0 评论 -
bzoj 3998
我们分成两种情况来分析这个问题:t=0和t=1t=1时,每一个子串出现的次数就是他在parent树上所在子树内前缀节点的个数,这一点我们已经说的很清楚了利用SAM有向无环的性质,我们可以在parent树上统计完之后在后缀自动机上dfs,对每个点累计以他为开头的所有子串的总数然后在查询的时候直接在SAM上跑,如果以当前点为开头的子串总数小于k,则将k减去这个总数后向他的兄弟节点查询,否则...原创 2019-04-20 10:33:41 · 424 阅读 · 0 评论 -
后缀自动机实际应用
上一篇我们具体介绍了后缀自动机的构造方式,但并没有谈它的应用,那么我们在这一篇里详细谈一谈后缀自动机的应用首先,后缀自动机的性质:从根节点开始可以识别一个字符串的所有子串接下来,我们需要给出一个定义:将后缀自动机上的pre指针反指,会得到一棵树形结构,我们把这棵树叫做parent树!parent树是原串反串的后缀树!记住这个定义,因为后缀自动机中大部分题都与这棵树有千丝万缕的联...原创 2019-04-20 10:21:36 · 788 阅读 · 0 评论 -
后缀自动机学习笔记
学了一周后缀自动机,觉得...好难啊(主要还是自己太弱了...)看见网上很多大佬的讲解,感觉总是有些似懂非懂,索性一起拿出来做一个总结,可能效果会好一些首先,我们能看到这样一个定义:后缀自动机是一个的确定性有限状态自动机,能接受这个字符串的所有后缀然后就不知道了......(不得不承认,对于我这种蒟蒻,看到这个定义的第一反应是看看别的...)所以我们直接从后缀自动机的结构与...原创 2019-04-20 09:23:24 · 347 阅读 · 0 评论 -
bzoj 3277
十分之恶心的后缀自动机(其实是水题,但是我太弱了...)首先,有一个预备知识:bzoj 2780https://blog.csdn.net/lleozhang/article/details/89365183现在我们假定你会了这道题然后我们来讨论这个问题:套路是一样的:仍然建起广义后缀自动机,然后搞出parent树首先我们要想一个问题:如何确定某一个子串在这些串中出现的次数...原创 2019-04-18 21:07:47 · 295 阅读 · 0 评论 -
bzoj 2780
后缀自动机的应用首先我们观察到:如果一个询问串的答案不为0,那么这个串一定是至少一个模式串的子串如果只有一个模式串,那么这个问题可以简单地用什么东西解决掉(比如普通后缀自动机)而这里有很多模式串,所以普通后缀自动机是不够的。那么我们提出广义后缀自动机所谓广义后缀自动机,可以简单理解成将很多个串建在同一个后缀自动机上所以它的构造就是:每插入完毕一个串,就将las指针指回根节点...原创 2019-04-18 10:20:28 · 245 阅读 · 0 评论 -
bzoj 3238
后缀数组+单调栈的应用首先我们研究一下这个表达式,可以发现前半部分与串的情况并没有关系,而只是跟串的长度有关,所以我们先把前半部分算出来:于是我们只需计算出即可那么可以发现,对于排名分别为i,j的两个串,他们的lcp应当是:但是这里的时间复杂度仍然很大我们换一个角度来思考:如果设,那么我们认为height[k]产生了一个贡献所以我们可以从每一个height[k]产生了多...原创 2019-04-15 20:00:05 · 215 阅读 · 0 评论 -
CF1015F
玄学字符串dp...题意:给定一个括号序列,求长度为2n的合法的括号序列的个数(要求每个被统计的合法序列中均至少有一个子串为给定的括号序列)题解:这题没有想的那么复杂,就是暴力的一个dp首先我们设状态f[i][j][k][0/1]表示当前放到了第i个括号,前i个括号中左右括号个数差为j,已经放好的括号中长为k的部分能与s相匹配,0/1表示之前是否存在与s能匹配上的一整个子串那么...原创 2018-10-30 20:35:26 · 170 阅读 · 0 评论 -
poj 2774
题意:给出两个字符串,求这两个子串中最长相同子串长度策略:首先,我们可以将这两个字符串首尾相接,这样我们就可以获得一个长字符串,然后我们对这个新串求出height数组,然后枚举所有height并且找出两个sa,查出这两个sa是否在两个串内,这样就可以了如果是的话就用height更新ans即可还有一个细节要注意(虽然没写也能A,但总归是个hack点啊)状况如下:如图所示,下面...原创 2018-09-29 15:55:48 · 172 阅读 · 0 评论 -
noip 2017 时间复杂度题解
自认为是少有的复杂的代码这题思想很简单,就是大模拟对于for循环,一行读入4个字符串,然后分类讨论:①:如果是一个正常的O(n),那么累计n的指数加1②:如果是一个常数级别的,那么继续循环,但是不累计指数③:如果这个循环是从n到常数,或大常数到小常数,那么这个循环及它内部的循环都不进,打好标记不要累计④:至于如何防止变量的重复使用:将用过的变量放进栈里并打上标记,循环结束时...原创 2018-09-28 16:06:57 · 701 阅读 · 1 评论 -
后缀数组学习笔记
后缀数组是一个很迷的字符串算法...后缀数组的特点是:思想嘛...还行 代码嘛...很乱首先做一些基础介绍:后缀数组(sa)是一个数组(废话),他的作用是存储字典序排名为i的后缀的位置(即后缀的起点)而后缀数组常常与rank数组同步计算,其中rank数组是起点为i的后缀的排名既然如此,我们只要求出sa和rank其中之一,我们就可以求出另一个接下来,我们就来考虑一下怎么求...原创 2018-09-21 16:07:17 · 213 阅读 · 0 评论 -
spoj New Distinct Substrings
vjudge原地爆炸...题意:求一个字符串不同的子串的个数策略:后缀数组利用后缀数组的sa和height两个功能强大的数组,我们可以实现上述操作首先有个很显然的结论:一个字符串的所有子串=它后缀的所有前缀这是很显然的,因为一个后缀的前缀遍历了所有以该后缀起点为起点的字符串的子串,那么如果我们遍历所有后缀的,就能找出这个字符串的所有子串了所以对于一个起点为sa[i]的字符串...原创 2018-09-26 19:02:23 · 100 阅读 · 0 评论 -
poj 3261
秒掉2/8的男人...这题也是考察的后缀数组基础应用:可重叠至少重复k次的最长子串显然还是对height数组应用于二分答案的检验二分一个长度,然后用height数组检验即可注意:不能单纯看height数组中出现某个值的次数,而是要关注height数组中连续出现某个值的次数,否则无法判断这个公共前缀是否相同代码:#include <cstdio>#includ...原创 2018-09-26 16:45:06 · 185 阅读 · 0 评论 -
poj 1743
激动ing...我完成了1/8的男人...其实不难,但我交了3页WA,原因是我为防RE特判n=1直接输出,并没有读入!!!题意:给定一个长为n的序列,定义该序列的两个子序列(连续)相似,当且仅当这两个子序列长度相同且互不重叠,而且这两个子序列每个序列内部相邻元素前后做差,将所有差值排列成一个序列,这两个子序列得出的序列完全相同,现在想求这样的子序列最长的长度举个例子:序列1 2 5和4...原创 2018-09-26 16:17:59 · 120 阅读 · 0 评论 -
bzoj 1009 GT考试
一道好题,利用kmp维护递推再更新矩阵乘法这题首先可以递推:设状态f[i][j]表示长串更新到了i位置,已经匹配短串匹配了j个数那么我们有转移:f[i][get_nxt(j)]+=f[i-1][j-1]当然,你并不懂这是什么意思我们挨个解释一下主题思想就是在前面放好的j-1个字符的基础上再放一个字符,看看会发生什么首先,这里应用的是kmp的next指针的含义(不会k...原创 2018-09-20 16:08:43 · 184 阅读 · 0 评论 -
AC自动机(trie图版)
AC自动机是一个多模字符串匹配的自动机(网上说的),主要作用是在一个长串中同时进行多个字符串的匹配基础芝士:trie树(字典树)烤馍片kmp单模字符串匹配如果不会的建议去网上学一下(本篇讲解略过)这里重点讲一讲AC自动机(由于本蒟蒻不会指针,所以所有算法一律不使用指针,请神犇们谅解)例:luogu3796 AC自动机(加强版)其实AC自动机就是在trie树上构造KM...原创 2018-09-20 13:33:02 · 1493 阅读 · 0 评论 -
manacher算法解析
manacher是很简单的字符串回文算法,作用是O(n)求出一个字符串的最长回文子串下面给出这一算法的详解首先,我们设原字符串是aaabba,很显然,这个字符串最长的回文子串长度为4那么我们就要思考一种算法来计算出这个长度于是manacher横空出世首先,我们知道,一个回文子串一定有一个对称轴(或者你叫对称中心?),所以正常来讲,如果想O(n)求出最长回文子串,我们只需枚举每个...原创 2018-09-18 21:06:44 · 699 阅读 · 0 评论 -
后缀自动机例题精讲
这一篇是后缀自动机的一些例题题解及总结:例:bzoj 3998题意:求一个字符串中第k小子串,t=0表示子串仅区别字典序,t=1表示子串区分起止位置解析:建起后缀自动机,构造parent树,利用后缀自动机有向无环累计子串个数查询即可具体解析:https://blog.csdn.net/lleozhang/article/details/89413818bzoj 2780...原创 2019-04-20 10:39:28 · 577 阅读 · 0 评论