「Manacher算法」学习笔记】的更多相关文章

觉得这篇文章写得特别劲,插图非常便于理解. 目的:求字符串中的最长回文子串. 算法思想 考虑维护一个数组$r[i]$代表回文半径.回文半径的定义为:对于一个以$i$为回文中心的奇数回文子串,设其为闭区间$[L,R]$,则半径$r=R-i+1$. $Manacher$算法利用一个类似$DP$的方法来求解这个问题.考虑维护一个目前已经达到的最大的右边界$P$,此右边界对应的对称中心以及左边界分别为$pos$,$P'$.那么分类讨论: 1. $i<P$ 此时我们可以找到$i$关于$pos$的对称点$j…
问题描述: 给你一个字符串 s,找到 s 中最长的回文子串. 链接:https://leetcode-cn.com/problems/longest-palindromic-substring 「Manacher 算法」的整体思路是:基于回文字符串的对称性,缓存前面字符的「臂长」信息,以便后面复用. 这里只以手绘小图片的方式简单讲解「Manacher 算法」 首先设想一个回文字符串,看下图 这个小人以身体为轴,左右对称,可以看作一个回文字符串(设想所有字符分布在其手臂和脖子上).也就是以脖子为中…
目录 问题引入 思考 Lagrange 插值法 插值过程 代码实现 实际应用 「洛谷 P4781」「模板」拉格朗日插值 「洛谷 P4463」calc 题意简述 数据规模 Solution Step 1 Step 2 证明 代码 「CF 995F」Cowmpany Cowmpensation 题意简述 数据规模 Solution Step 1 Step 2 证明 代码 「CF 662F」The Sum of the k-th Powers 题意简述 数据规模 Solution 代码 「BZOJ 3…
目录 「CF 750E」New Year and Old Subsequence 「洛谷 P4719」「模板」"动态 DP" & 动态树分治 「洛谷 P6021」洪水 「SP 6779」GSS7 「NOIP 2018」「洛谷 P5024」保卫王国 \(\mathcal{Introduction}\) \(\mathcal{Problem~1}\)   给定序列 \(\{a_n\}\),其中 \(a_i\in\mathbb Z\),求其最大子段和(不能为空).   很显然的 DP…
\(\mathcal{Preface}\)   单位根反演,顾名思义就是用单位根变换一类式子的形式.有关单位根的基本概念可见我的这篇博客. \(\mathcal{Formula}\)   单位根反演的公式很简单: \[[k|n]=\frac{1}k\sum_{i=0}^{k-1}\omega_k^{ni} \] \(\mathcal{Proof}\)   分类讨论: \(k|n\). 那么 \((\forall i)(\omega_k^{ni}=1)\),所以右侧为 \(\frac{1}k\su…
AC自动机(Aho-Corasick Automaton),虽然不能够帮你自动AC,但是真的还是非常神奇的一个数据结构.AC自动机用来处理多模式串匹配问题,可以看做是KMP(单模式串匹配问题)的升级版.常常见到这样的说法,AC自动机 = Trie树 + KMP. 原理初步 首先对于所有的模式串,我们先需要利用Trie树将其建起来.AC自动机最巧妙的部分在于失配指针(fail)的构建,也就类似KMP中的next数组,只不过现在变为了多模式串.在匹配的时候沿着trie树走,发现不匹配即跳转失配指针,…
话说天下大事,就像fhq treap —— 分久必合,合久必分 简单讲一讲.非旋treap主要依靠分裂和合并来实现操作.(递归,不维护fa不维护cnt) 合并的前提是两棵树的权值满足一边的最大的比另一边最小的还小.因此时合并时只需要维护键值的堆性质即可.这样每一次比较根节点,如果x比y小那么y直接接到x的右子树即可(需要满足权值的平衡树性质):否则的话只需要反过来,把x接到y的左子树上.merge函数返回的值应当是合并完后的根节点. 分裂分为两种,排名和权值.然而我认为它们本质上是一样的.对于权…
还以为是什么非常高大上的东西花了1h不到就学好了 线性基 线性基可以在\(O(nlogx)\)的时间内计算出\(n\)个数的最大异或和(不需要相邻). 上述中\(x\)表示的最大的数. 如何实现 定义\(p[i]\)表示在二进制下从最高位开始第一个出现\(1\)的数. 当前我们将一个数插入线性基中. 如果\(x\)的最高位的\(1\)还没有被插入过,那么就在这一位上插入\(x\). 如果当前这一位被插入过,那么就异或上这一位上的数. 查询操作:从最高位上开始贪心. 如果异或这一位上的数可以让答案…
Link-Cut Tree,用来解决动态树问题. 宏观上,LCT维护的是森林而非树.因此存在多颗LCT.有点像动态的树剖(链的确定通过$Access$操作),每条链用一颗$splay$维护.$splay$维护链的关键字是深度,因此一条链的顶端就是$splay$中键值最小的点 由于LCT的资料有很多,在此不详细阐述.只是谈谈理解有困惑的几个点,其中大多已经解决了: 关于虚边 这里的虚边其实不能算叫边,只能说是一个父指针.由于splay是二叉树,但有可能出现有好多虚边指向一个点的情况.因此虚边其实就…
0.前言 从这篇随笔开始记录Java虚拟机的内容,以前只是对Java的应用,聚焦的是业务,了解的只是语言层面,现在想深入学习一下. 对JVM的学习肯定不是看一遍书就能掌握的,在今后的学习和实践中如果有领会到的心得和踩过的坑,将会对这些文章进行更新. 另外,人脑更喜欢图胜过文字,有些流程先用文字码在那儿,后面有时间再画图. 1.「深入理解Java虚拟机」学习笔记(1) - Java语言发展趋势 2.「深入理解Java虚拟机」学习笔记(2)- JVM内存区域 3.[Java]「深入理解Java虚拟机…
「ExLucas」学习笔记 前置芝士 中国剩余定理 \(CRT\) \(Lucas\) 定理 \(ExGCD\) 亿点点数学知识 给龙蝶打波广告 Lucas 定理 \(C^m_n = C^{m\% mod}_{n\% mod} \times C^{\frac{m}{mod}}_{\frac{n}{mod}}\) 适用条件 给出的数据范围较大(无法用线性求出) 模数很烂的时候(会使阶乘中出现 \(0\)) \(mod\) 必须为质数 证明 证明很恶心,略. 模板 某谷P4720 #include…
「Android 开发」入门笔记(界面编程篇) ------每日摘要------ DAY-1: 学习笔记: Android应用结构分析 界面编程与视图(View)组件 布局管理器 问题整理: Android官方API文档 如何设置Android中的颜色 Android Studio如何进行调试 每日体会 参考资料 DAY-2: 学习笔记: TextView及其子类 问题整理: 关于API版本的一点疑问及解决 如何实现按钮按下和松开时为不同的图片 关于如何实现文本域中灰色的提示文本的一点思考 每日…
引言 众所周知,字符串无论是在 OI 中还是别的计算机领域都占有比较大的比重,今天说的就是一个关于匹配字符串的算法——「 KMP 算法 」. 0x00 KMP 算法用于解决这样的一类问题:给定一个文本串 T 和模式串 S,要求你求出 S 在 T 中出现的次数和位置(我们定义位置为 S 中第一个字符在 T 中匹配到的位置) 当然它还有许多别的用法.具体的可以通过一道题目来体现一下 HDU 3336 0x01 我们都知道朴素的匹配字符串的算法,不知道的看下面这个例子. 文本串:ABADCADCAB…
目录 圆方树的定义 圆方树的构造 实现 细节 圆方树的运用 「BZOJ 3331」压力 「洛谷 P4320」道路相遇 「APIO 2018」「洛谷 P4630」铁人两项 「CF 487E」Tourists 「SDOI 2018」「洛谷 P4606」战略游戏 「BZOJ 4316」小C的独立集 「洛谷 P5236」「模板」静态仙人掌 「HNOI 2009」「洛谷 P4410」无归岛 圆方树的定义   圆方树是由一个无向图转化出的树形结构.转化方法为: 所有原图的点为"圆点". 对于每个点…
串的应用与kmp算法讲解 1. 写作目的 平时学习总结的学习笔记,方便自己理解加深印象.同时希望可以帮到正在学习这方面知识的同学,可以相互学习.新手上路请多关照,如果问题还请不吝赐教. 2. 串的逻辑存储        串指的是字符串,是一种特殊的线性表,特殊性在于只能存储字符,即可以使用顺序存储也可以使用链式存储,简单的谈一下两种存储结构的优缺点. 顺序存储        顺序存储使用的是数组,既然是数组就是申请固定空间,当串需要拼接,替换时,可能会对数组进行扩容,这种操作就比较耗时,而且有时…
2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 3665  Solved: 1422[Submit][Status][Discuss] Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col.为了满足墨墨的要求,你知道你需要干…
前置芝士 树连剖分及其思想,以及优化时间复杂度的原理. 讲个笑话这个东西其实和 Dsu(并查集)没什么关系. 算法本身 Dsu On Tree,一下简称 DOT,常用于解决子树间的信息合并问题. 其实本质上可以理解为高维树上 DP 的空间优化,也可以理解为暴力优化. 在这里我们再次明确一些定义: 重儿子 & 轻儿子:一个节点的儿子中子树最大的儿子称为该节点的重儿子,其余的儿子即为轻儿子.特殊的,如果子树最大的有多个,我们任取一个作为重儿子. 重边 & 轻边:连接一个节点与它的重儿子的边称为…
FFT即快速傅里叶变换,离散傅里叶变换及其逆变换的快速算法.在OI中用来优化多项式乘法. 本文主要目的是便于自己整理.复习 FFT的算法思路 已知两个多项式的系数表达式,要求其卷积的系数表达式. 先将两个多项式分别转化为点值表达式,完成点值表达式的乘法,然后转为系数表达式得到结果. 点值表达式的乘法.整体考虑:假设已知两个多项式$A(x)$和$B(x)$.如果已知当$x=x_0$时$A(x_0)$和$B(x_0)$,则其乘积一定有点值$A(x_0)*B(x_0)$.因此点值表达式的乘法复杂度$O…
目录 前置知识 群 置换 Burnside 引理与 Pólya 定理 概念引入 引例 轨道-稳定子(Orbit-Stabilizer)定理 证明 Burnside 引理 证明 Pólya 定理 证明 应用例 完整的 Pólya 定理及扩展 概念引入 Pólya × GF--完整的 Pólya 定理 前置知识   关系.映射等基本的东西就略啦. 群   对于集合 \(S\not=\varnothing\) 与作用于 \(S\) 的元素的二元运算 \(\cdot\) 构成的代数结构 \((S,\cd…
\(\mathcal{Definition}\)   线性规划(Linear Programming, LP)形式上是对如下问题的描述: \[\operatorname{maximize}~~~~z=\sum_{i=1}^nc_ix_i\\\operatorname{s.t.}\begin{cases} \sum_{j=1}^na_{ij}x_j\le b_i&i=1,2,\cdots,m\\ x_i\ge0&i=1,2,\cdots,n\end{cases} \] 其中,\(\opera…
C/C++在编译时需要进行连接,而Java的类加载.连接和初始化是在运行时完成的. 图  类的生命周期 图中解析的过程不一定在准备和初始化之间,也可以在初始化之后再开始,以支持Java的运行时动态绑定. 一.类加载过程 1.加载 加载是整个“类加载”过程的第一个阶段.这一步也叫“加载”,可以理解为把类从文件中读取到内存中并按一定数据结构保存以备后续使用. 主要分为三个步骤: ①通过类的全限定名获取其字节码. ②将字节码中的静态存储结构转换成方法区的运行时数据结构. ③在内存中创建一个代表这个类的…
设正整数$m_1, m_2, ... , m_r$两两互素,对于同余方程组 $x ≡ a_1 \ (mod \ m_1)$ $x ≡ a_2 \ (mod \ m_2)$ $...$ $x ≡ a_r \ (mod \ m_r)$ 有整数解.设$P = \prod\limits_{k = 1}^{r} m_k$,则有 $$x ≡ a_1 M_1 M_1^{-1} + a_2 M_2 M_2^{-1} + ... + a_r M_r M_r^{-1}\ ( \ mod \ P)$$ 其中,$M_i…
我为什么喜欢Java,另一个重要原因就是跨平台,WORA. 程序员是爽了,但肯定有人要为你遮风挡雨,解决WORA的基石就是字节码+虚拟机. ♣Tip 其实这里存在两种无关性,一是平台无关性.另一个是语言无关性.通过向不同的硬件平台和操作系统提供 不同的JVM实现上层应用和底层平台之间的解耦:另一个,JVM生态系统中有多种语言如Scala.Groovy和Jruby, 它们通过编译生成统一的字节码来实现互操作,达到了语言无关性的目的,这样各个语言可以在各自擅长的领域发挥作用. 概括了一下字节码文件的…
一.运行时数据区 JVM在执行Java程序的时候,将其运行时数据区划分为若干不同区域.它们的用途和创建及销毁的时间不同. 1.程序计数器(Program Counter Register) 是一块很小的内存空间.当线程执行的是Java方法,它记录的是当前正在执行的字节码指令的地址:当线程执行的是Native方法,则它的值为空. 2.虚拟机栈(Java Virtual Machine Stacks) 它描述的是Java方法执行的内存模型:每个方法在执行的时候都会创建一个栈帧,用来存储变量表.操作数…
  大概--会很简洁吧 qwq. 矩阵树定理   对于无自环无向图 \(G=(V,E)\),令其度数矩阵 \(D\),邻接矩阵 \(A\),令该图的 \(\text{Kirchhoff}\) 矩阵 \(K=D-A\).取其任意一个 \(n-1\) 阶主子式 \(K'\),则 \(G\) 的生成树个数 \(s=\det K'\).   证明先咕掉 qwq. 一些推广   对于有向图以 \(r\) 为根的内向生成树,取 \(D\) 为初度矩阵,取主子式时删去 \(r\) 行 \(r\) 列,再求行列…
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Submit][Status][Discuss] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只…
有日子没写博客了,这些天忙着一些杂七杂八的事情,直到某天,老师喊我好好把数据挖掘的算法搞一搞!于是便由再次埋头看起算法来!说起数据挖掘的算法,我想首先不得的不提起的就是大名鼎鼎的由决策树算法演化而来的C4.5算法,毕竟这是当年各个“鼻祖”在数据挖掘大会投票结果最高的一个算法了! 那我们现在就来具体看看C4.5算法到底是个什么东东?我想,首先我们应该提起的是决策树算法,我们首先要弄明白该算法的目的是什么,其本质目的实质就是预测!在一个系统当中,通过输入某些属性值可以预测出我们的预测属性!这么说可能…
二分查找 二分查找又称折半查找,其输入的必须是有序的元素列表.二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止:如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x #python实现二分查找 def binary_search(list,item): low=0 high=len(list)-1 while(low<=high): mid=int((low+hi…
//*****-*-----vector***/////// 常用操作封装,a.size();可以读取大小               a.resize();可以改变大小:               a.push_back();可以向尾部添加元素:     因为是个模板类     声明:             vector<int>a;vector<int>是一个类似于int a[];的整数数组:             vector<int>b;         …
1001. 害死人不偿命的(3n+1)猜想 (15) 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展-- 我们今天的题目不是证明卡拉兹猜想,…