摘要: Manacher算法是一个求字符串的最长回文子串一种非常高效的方法,其时间复杂度为O(n)。下面分析以下其实行原理及代码: 1.首先对字符串进行预处理 因为回文分为奇回文和偶回文,分类处理比较麻烦,所以我们先要做一个预处理,在字符之间插入一个特殊字符(注意这个新插入的字符不能再原字符串中出现),这样 阅读全文
posted @ 2020-02-02 13:29 StungYep 阅读(145) 评论(0) 推荐(0)
摘要: 基础:AC自动机是建立在 trie 树和 kmp 基础之上的,为什么这么说,因为AC自动机是基于字典树的数据结构之上的,其次它是一个自动机,用到了 kmp 的失配数组的思想。 应用:在模式匹配的问题中,如果模板有很多个,可以用AC自动机来求解。 结构:字典树结构: Fail数组(失配数组):如果现在 阅读全文
posted @ 2020-02-02 13:26 StungYep 阅读(227) 评论(0) 推荐(0)
摘要: 前缀和 [TOC] 前缀和顾名思义就是前x个数组元素之和,二维前缀和就是(1, 1)到(i, j)中矩形内所有元素的和。 include include include using namespace std; const int maxn=5005; int arr[maxn][maxn],sum 阅读全文
posted @ 2020-02-02 13:23 StungYep 阅读(524) 评论(0) 推荐(1)
摘要: 离散化可以将无穷大集合中的若干个元素映射到有限集合中以便于统计的方法。在数据范围特别大而元素个数有限我们又需要遍历的时候,可以离散化一下,注意不同题目的离散化要求可能不一样,这里给出一种比较常见的离散化代码,不同题目要做相应的修改(比如线段树区间染色要将中间加个1): c++ include usi 阅读全文
posted @ 2020-02-02 13:05 StungYep 阅读(285) 评论(0) 推荐(0)
摘要: 1.选择排序法 每循环一次将最值挑出来放在前面,实践复杂度为O(n^2),不稳定排序,其基本的语法如下: 2.冒泡排序法 每循环一次将最值冒到尾部,时间复杂度为O(n^2),稳定排序,其基本的语法如下: 3.C++STL之sort排序 sort排序可以捆绑结构体一起使用,求出原来的序号和排序后的序号 阅读全文
posted @ 2020-02-02 13:03 StungYep 阅读(166) 评论(0) 推荐(0)
摘要: 二分 [TOC] 二分是一种思想,其不仅限于查找。其中查找是一个很典型的应用。个人对二分的理解:如果一个题目告诉你最大答案范围,即在那个范围里肯定存在一个答案,那么就可以用二分(查找很典型了吧,不过查找也可以找不到,最后arr[mid]!=num to be find)。 二分查找是一种查找效率非常 阅读全文
posted @ 2020-02-02 12:45 StungYep 阅读(700) 评论(0) 推荐(0)
摘要: STL及一些常用函数的基本用法 [TOC] 1.vector(向量)的基本用法 vector是C++的STL中一个常见的容器,使用时需要加上\ include\的头文件,其可以动态储存数据,既可以很方便的实现插入,删除等基本操作,其基本语法如下: c++ include include using 阅读全文
posted @ 2020-02-02 12:27 StungYep 阅读(1023) 评论(0) 推荐(1)
摘要: 后缀数组定义:~~让人懵逼的有力工具~~ ,指某一字符串后缀按照字典序的一个排列。sa[i] = j 的含义为所有后缀按照字典序排列,排在第 i 个的是后缀 j 。 1.各变量的含义 此算法涉及到很多坨数组及变量,故在这里做一个罗列: sa[ i ]:表示排名为 i 的后缀的起始位置下标; rak[ 阅读全文
posted @ 2019-08-02 16:12 StungYep 阅读(841) 评论(1) 推荐(1)