自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 浅析马拉车Manacher算法(附Codeforces 17E Palisection)

引入在字符串问题处理中,常常会遇见处理回文串的问题。那么首先就要介绍一下什么是回文串——回文串就是对于一个字符串,

2020-04-06 17:53:52 294

原创 神奇的数学——差分

定义差分就是对于一组序列,将该项与其前一项作差所得到的序列,其中差分序列第一项与原项相同(即第一项−0-0−0),最后一项与原项互为相反数(即0−0-0−最后一项),同时需要注意的是,差分序列比原序列多一项,这是因为最后一项的差分多引入了一个0来作差。例如对于序列:1,3,2,5,6,8,31,3,2,5,6,8,31,3,2,5,6,8,3,其差分序列为:1,2,−1,3,1,2,−5,−31...

2020-04-06 16:21:35 512

原创 初探回文树/回文自动机

概述回文树(Palindromic TreePalindromic\ TreePalindromic Tree,又称回文自动机)是一种用于存储字符串所有回文子串的数据结构,通过对这些回文子串建立回文树,从而高效便捷地解决一系列设计回文串的问题。前置姿势字典树AC自动机实现由于本人太懒,所有图片来源于网络先来明确回文树与普通字典树的区别所在:和字典树不同的第...

2020-04-05 21:20:37 220

原创 浅析后缀数组

引入在多模式匹配时,之前提到的AC自动机能够以很高的效率进行匹配,但是匹配的前提是要知道所有的模式串后建立自动机,再和文本串进行匹配,所以利用自动机的前提是必须知道所有模式串,而在例如搜索引擎中,模式串是未知的,所以这时候就需要对文本串进行处理,从而有了后缀数组。原理首先显而易见模式串一定是文本串某个后缀的前缀,也可能就是这个后缀(这里假设模式串是可以匹配到的)。所以对一个文本串,可以将其分...

2020-03-29 16:21:16 159

原创 浅析AC自动机

前置知识KMP算法字典树Trie其实会了也不一定懂,但不会一定不懂简介AC自动机是在以字典树为基础的数据结构下,结合  KMP  \;KMP\;KMP算法的思想所建立的一种更为高级的数据结构说不说这句话其实没区别,常用于多模式串的匹配,通过引入一个  fail  \;fail\;fail指针来减少匹配的回溯次数,更高效的进行匹配。实现首先最根本的就是先要由多个模式串建立起字典树,然后...

2020-03-21 21:23:10 132

原创 动态规划例题解析

前言:一直想写一个专门分析动态规划的博客,无奈这种优雅的暴力实在没有一个固定的模板来尽可能解决大部分问题。动态规划算法太过灵活,初始状态的设定以及状态转移方程的求解也是极其困难的,所以只能通过大量的题目训练来熟悉和掌握这种思想。1.Codeforces 1096D题目大意:给定一个字符串,每个字符都有其对应的权值,现要求从中删除一些字符,使得得到的字符串不包含"hard"的子序列,问最小代价...

2020-03-20 21:32:29 233

原创 字符串Hash例题详解

1.Codeforces 961F k-substrings题目大意:给定一个字符串,对于它的所有子串  k−substrings  \;k-substrings\;k−substrings,问其前缀和后缀相同的最大长度,且长度必须为奇数,如果不存在则为  −1  \;-1\;−1。  k−substrings  \;k-substrings\;k−substrings是这样定义的:对于每个...

2020-03-15 11:12:10 407

原创 再探字符串匹配——Z算法/Z-BOX算法(附CF 149E-Martian Strings )

前言关于字符串匹配,最常见使用最广泛的即KMPKMPKMP算法,该算法通过对模式串的子串的前后缀进行处理而减少回溯次数,提高匹配效率,相关内容参考浅析字符串匹配算法——KMP算法。此文主要讨论字符串的另一种匹配算法——ZZZ算法/Z−BOXZ-BOXZ−BOX算法。原理何为ZZZ算法,ZZZ算法的主要设计思想是通过一个zzz数组来记录一个字符串的后缀与该字符串的最大前缀匹配长度。换句话说,z...

2020-03-11 22:59:06 379

原创 浅析字符串匹配算法——KMP算法(附CF 535D-Tavas and Malekas)

引入在计算机中,人类的语言、文字等往往利用字符串进行保存,而字符串的匹配也对人们的生活产生着举足轻重的作用,例如个人信息的匹配、搜索引擎的使用等,为了在庞大的数据中找到我们所需的数据,字符串匹配的效率就决定了解决问题的难易程度。实现对于字符串的匹配,最简单且最容易实现的方法就是将模式串与文本串一一比对,观察每一位上的字符是否相等,如果不等则将模式串后移一位,再逐一进行比对,假定模式串的长度为...

2020-03-07 17:24:54 280 1

原创 浅析二叉堆

原理堆是一颗完全二叉树,其中堆顶一定是“最大”或“最小”的,这里的“最大”“最小”是相对于优先级而言,并不是简单的数值大小。堆一般分为小根堆和大根堆,即对于任一非根节点,它的优先级都大于或小于堆顶。其中,C++的STL中的优先队列就是二叉堆的应用。堆的操作1.插入对于堆的插入,实现原理就是不断与其父结点进行比较,如果不满足大根堆或小根堆的性质,则进行交换,由于堆是完全二叉树,所以满足关系...

2020-03-02 09:26:14 146

原创 浅析快速幂

引入对于整数a,b,pa, b, pa,b,p,要求计算ab mod pa^b\ mod\ pab mod p的值,朴素算法很容易实现,只需要进行bbb次累乘即可得到结果,并注意在累乘过程中防止溢出,即利用(a∗b)mod p=(a mod p ∗ b mod p)mod p\...

2020-02-24 09:40:50 86

原创 浅谈单调队列

介绍单调队列,顾名思义,就是具有单调递增或者单调递减性质的队列。而单调队列可以解决“滑动窗口”的问题——滑动窗口即对一段长度为n的序列,对于每个连续的长度为k的子串,求得该字串的最小值或最大值,在线性时间内完成整个过程。另外,单调队列对解决动态规划问题也提供了有力的优化。双端队列实现:typedef struct{ int index; //记录入队时间 int x; //记录数...

2020-02-17 20:52:13 115

原创 浅析字典树

什么是字典树字典树是一种利用树形结构来存储字符串的数据结构。利用树形结构一对多的特点,每个元素都可以有多个子元素,因此在字符串比较过程中,只需要判断最后一个元素的祖先链是否相等,时间复杂度为O(n)O\left ( n \right)O(n)。typedef struct{ int node[26]; //此处只考虑小写字母 bool mark;}trie;trie t[maxn]...

2020-02-17 20:14:22 409

原创 浅析字符串哈希

何为字符串哈希所谓字符串哈希,即对一个字符串形成单向加密的过程,使其拥有尽可能独一无二的编号,通过这种低概率的编号重复,使得字符串的匹配尽可能高效。如何字符串哈希最普遍的字符串哈希方式,即进制哈希。核心是将字符串上的每一个字符理解为一个数字,然后固定一个进制,将该字符串转化成一个该进制下的的数,作为其哈希值,然后通过比对哈希值,判断两个字符串是否相等。ll Hash(char s[]){...

2020-02-17 11:59:51 319

原创 浅析二叉查找树

什么是二叉查找树所谓二叉查找树,就是严格任一左子树小于根,右子树大于根的二叉树,平均情况在O(log n)内查找数据元素。参考博客#include<bits/stdc++.h>using namespace std;const int maxn = 9e2 + 16;const int INF = 0x7fffffff;int pos;typedef struct Bi...

2020-02-07 12:19:09 151

原创 浅析Simpson算法

Simpson算法用于求解定积分一类问题。思路是用抛物线对原函数进行拟合,在误差足够小的前提下近似得到原函数的积分值。参考博客inline double function(double t){ //所求积分函数}inline double simpson(double m, double n){ double mid = m + (n - m) / 2; return (n ...

2020-02-06 09:56:55 1768

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除