- 博客(10)
- 收藏
- 关注
原创 扫描线学习笔记
本文介绍了计算矩形面积并和周长并的算法。对于面积并问题,通过扫描线算法将重叠矩形分解为无重叠部分,使用线段树维护当前覆盖宽度。对于周长并问题,在面积并算法基础上,额外统计独立横线数量并计算竖线长度变化。两种算法的时间复杂度均为O(n log n),适用于大规模数据。文章提供了对应的模板题代码实现,详细说明了线段树的维护方式和统计方法。
2025-07-25 21:24:40
605
原创 ST 表学习笔记
ST表是一种用于高效解决静态区间最值查询的数据结构,通过预处理倍增信息实现O(1)查询。其核心思想是将区间划分为两个有重叠的2^k长度子区间,通过预处理每个起点开始的不同长度区间的最大值。初始化时采用动态规划,st[j][i] = max(st[j][i-1], st[j+2^(i-1)][i-1])。查询时利用对数运算确定合适的k值,合并两个子区间结果。相比线段树,ST表实现更简单、常数更小,特别适合没有修改操作的场景。文末提供了洛谷模板题的实现代码。
2025-07-25 21:04:33
563
原创 Manacher 学习笔记
本文介绍了求解最长回文子串的两种方法。暴力法通过以每个字符或空隙为中心向外扩展,时间复杂度为O(n²)。更高效的Manacher算法通过插入分隔符统一处理奇偶长度问题,利用回文对称性避免重复计算,将复杂度降至O(n)。算法核心是维护一个p数组记录每个中心的最长回文半径,并通过maxid和id变量优化扩展过程。最终p[i]-1即为原串中的回文长度。模板代码展示了如何实现该算法,其线性复杂度来自对字符串的单次遍历和有限次数的暴力扩展。
2025-07-17 22:41:42
1063
原创 KMP 学习笔记
本文介绍了字符串匹配问题及其解决方案。首先,暴力匹配算法通过枚举文本串中的每个位置并逐个比较字符来判断模式串是否出现,但其时间复杂度为 (O(|s| * |t|)),效率较低。随后,文章详细介绍了 KMP 算法,该算法通过预处理模式串的 nxt 数组来记录每个前缀的最长公共前后缀长度,从而在匹配过程中利用已匹配信息跳过不必要的比较,将时间复杂度优化至 (O(n + m))。KMP 算法的核心在于通过 nxt 数组的构建和应用,实现高效的字符串匹配。
2025-07-17 16:55:40
738
原创 Nim 游戏学习笔记
Nim游戏及其阶梯变形的胜负判定方法。公平组合游戏Nim中,n堆石子的异或和为x:若x=0则先手必败,否则必胜。阶梯Nim则将奇数层石子视为普通Nim堆,偶数层不影响结果,只需计算奇数层异或和即可判定胜负。通过分析不同操作对x值的影响,证明了最优策略的存在性。
2025-06-05 22:25:33
970
原创 一些导致WA/MLE/TLE的坑点
本文总结了几个算法竞赛中常见的错误与优化技巧:1.避免使用pow函数计算快速幂以防精度问题;2.节点数多时应使用链式前向星而非vector存图防MLE;3.bool类型不能用%d输入;4.关闭同步流时避免使用递归快写函数;5.注意点双和边双处理时的特殊要求;6.警惕自增运算符在复杂表达式中的使用顺序问题。这些经验教训来自洛谷多道题目的WA/TLE/MLE测试案例。
2025-03-02 21:27:24
307
原创 Tarjan求解LCA
本文介绍了Tarjan算法在求解最近公共祖先(LCA)中的应用。该算法是一种离线算法,需要收集所有查询后统一处理。核心思路是通过DFS遍历树结构,并利用并查集维护已访问节点的祖先信息:当回溯到某个祖先节点p时,若发现查询的两个节点u和v同属于p的子树,则p即为它们的LCA。文中提供了算法框架和具体实现代码,包括DFS遍历、并查集操作以及查询处理过程。该算法效率高,时间复杂度优异,适用于树结构中的LCA查询问题。
2025-02-09 22:16:19
288
原创 盘点我那些因概念理解不清而TLE的题(洛谷)
本文分享了两个算法优化案例。第一个案例通过Tarjan求强连通分量后采用DFS更新最大值,但遇到DAG结构导致时间复杂度超预期,最终通过改进DFS和标记处理解决了问题。第二个案例在KMP算法实现中,原方案在处理重复字符时出现O(n^2)复杂度,通过调整跳转逻辑优化为线性复杂度。两个案例都体现了对算法核心思想的深入理解以及调试分析的重要性,特别是数据结构特性和边界条件对性能的关键影响,最终通过针对性优化成功解决问题。
2025-02-08 23:07:06
810
原创 Tarjan 与连通性问题
1. 强连通分量的Tarjan算法实现,通过时间戳和栈结构识别强连通子图;2. 缩点操作将同一强连通分量节点合并;3. 割边识别条件及边双连通分量求解;4. 割点判断和点双连通分量求解,处理自环等特殊情况;5. 2-SAT问题的解法,通过建立蕴含图并检查强连通分量进行可行性判断。
2025-02-08 22:17:57
916
原创 洛谷P2812/P2746解题思路
本文介绍了使用Tarjan算法解决有向图强连通分量问题的过程。作者通过链式向前星建图,统计入度和出度为0的强连通分量数量,并多次调试解决边界条件问题。最终发现当图中存在多个不连通分量时,需要取入度和出度为0的强连通分量数的最大值作为结果。文中详细记录了从81分到AC的调试过程,包括处理环状结构、孤立点等特殊情况,最终得出正确解法。
2025-02-08 21:44:58
1089
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人