- 博客(22)
- 收藏
- 关注
原创 exCRT 学习笔记(推导)
扩展中国剩余定理(exCRT)用于求解模数不互质下的同余方程组。核心思想是逐个合并方程:设前 $i-1$ 个方程的解为 $x$,周期为 $M = \text{lcm}(m_1,\dots,m_{i-1})$,将第 $i$ 个方程 $x + tM \equiv a_i \pmod{m_i}$ 转化为关于 $t$ 的线性同余方程,利用扩展欧几里得算法求解。若 $\gcd(M, m_i) \nmid (a_i - x)$ 则无解;否则通过逆元求出 $t$,更新解与周期。时间复杂度 $O(n \log \max m
2026-10-24 18:28:41
179
原创 行列式基础 & Matrix-Tree 定理 学习笔记
本文介绍了矩阵行列式及其计算算法,以及Matrix-Tree定理在生成树计数中的应用。首先讲解了行列式的定义和性质,包括转置不变性、交换行变号、可加性等。然后给出了利用高斯消元计算行列式的模板代码,处理了模数非质数的情况。接着阐述了Matrix-Tree定理,证明其通过行列式计算有向图中以某点为根的内向生成树的权值和,并提供了模板题代码实现。最后指出该定理也可推广到无向图的情况。
2026-08-19 19:58:28
386
原创 P2466 [SDOI2008] Sue 的小球 & P4870 [BalticOI 2009] 甲虫 (Day1)
本文讨论了两道区间动态规划问题的解法思路: P2466题目中,通过将彩蛋位置排序后,采用区间DP求解。状态定义为在区间(l,r)两端点处的最大得分,通过提前计算未拾取彩蛋的时间惩罚来优化转移。需要注意long long类型和初始位置处理。 P4870题目与P2466类似,但增加了露水蒸发限制条件。解法是枚举最终有效区间长度,同样采用区间DP,状态转移时考虑端点移动的代价和剩余露水数量。需要区分局部变量和全局变量。 两题都体现了区间DP中提前计算未来影响的优化思想,并给出了对应的C++实现代码。
2026-08-19 19:58:02
193
原创 题解:P2263 命运的彼方
摘要:本文研究了一个序列问题,要求在给定序列中找到一个长度为k的连续子序列,使得子序列中各元素与某个x的绝对差之和最小。通过分析发现x应取子序列的中位数。利用树状数组高效维护区间信息,并采用倍增法快速定位中位数,实现了O(n log n)的解法。代码通过离散化和树状数组优化,在合理时间内解决了该问题。
2026-01-30 20:59:29
657
原创 CRT 学习笔记(推导)
摘要:本文介绍了一元线性同余方程组的解法,重点讨论了模数互质时的中国剩余定理(CRT)。通过构造满足特定条件的数,证明了在模数乘积意义下解的唯一性,并给出了解的公式:x ≡ Σ(a_i·M_i·M_i^{-1}) mod M,其中M_i=M/m_i,M_i^{-1}是M_i模m_i的逆元。最后提供了C++实现代码,包含扩展欧几里得算法求解逆元及CRT核心计算过程。该解法适用于模数互质的情况,时间复杂度主要取决于扩展欧几里得算法。
2026-01-30 20:57:11
777
原创 题解:CF946G Almost Increasing Array
我们称一个数组为“几乎递增”的,如果我们可以从中删除不超过一个元素,使得数组变为严格递增(即每个元素都严格大于它前面的所有元素)。你可以将数组中的任意元素替换为任意整数(你可以进行任意多次替换)。请你求出,最少需要进行多少次替换操作,才能使数组。不被替换时,不被替换的数的最大数量。可以被随意替换(即全部被替换,因为如果不替换。现在考虑可以删除数组中一个元素的情况。,扔进树状数组维护前缀最大值即可。首先考虑不能删除的题目弱化版。已经删除了一个元素的答案。转移的条件与弱化版一样。从未删除过元素的答案,
2026-01-19 11:54:55
748
原创 反悔贪心学习笔记
本文介绍了反悔贪心算法的两类典型问题及解法。第一类是在不相邻位置选取k个数使和最大/最小的问题,通过优先队列和双向链表实现"反悔"操作,先选当前最优数,必要时替换为相邻数。第二类是在有限条件下完成最多任务的问题,通过按截止日期排序并动态调整选择,必要时替换耗时更长的任务。文章提供了洛谷相关模板题的代码实现,展示了反悔贪心在具体问题中的应用。这种算法通过允许临时"错选"并后续修正,相比传统贪心能获得更优解。
2026-01-19 11:48:47
843
原创 树上启发式合并学习笔记
本文介绍了离线处理静态有根树子树问题的启发式合并算法。该算法通过优先处理重子节点并保留其信息,再处理轻子节点,将原本O(n²)的暴力解法优化至O(nlogn)。核心步骤包括两次遍历轻子树和保留重子树信息,利用了树剖中"轻边不超过logn条"的性质,确保每个节点最多被处理O(logn)次。算法适用于统计子树颜色、路径异或等可通过合并子树信息求解的问题,显著提升了处理效率。
2025-11-18 22:37:04
690
原创 洛谷 P8137 [ICPC 2020 WF] ‘S No Problem
本文研究树形结构上使用两条不交路径覆盖所有边的最小代价问题。通过分析单吹雪机情况,推导出双吹雪机的最优解应为总边权和的2倍减去两条最长不交路径长度之和。采用树形DP方法,定义四种状态分别表示子树中的最优路径组合,并通过状态转移方程求解。最终时间复杂度为O(n),空间复杂度O(n)。实验结果表明该算法能有效求解该问题。
2025-10-24 22:10:49
406
原创 洛谷 P13823
本文提出了一种求解图中节点到连通块内最大权值节点的最小变化次数的算法。首先将原图转化为无向图,并定义路径变化次数的概念。通过DFS找出各连通块及其最大权值节点,然后利用改进的拓扑排序算法计算每个节点到最大权值节点的最小变化次数。算法在遍历过程中动态更新路径方向和变化次数,最终输出每个节点的最小变化次数。该方法有效解决了在有向图中计算特定路径属性的问题。
2025-10-06 17:14:51
342
原创 51nod 1815 调查任务
该题目考察在DAG上寻找路径中的严格次小值问题。通过Tarjan算法将原图缩点为强连通分量,每个分量维护最大值和次大值。然后进行两次拓扑排序:第一次用路径上的最大值更新各分量的次大值,第二次传递最优解。最终每个城市的经济状况即为所属强连通分量的答案。算法时间复杂度为线性,能够处理大规模数据。
2025-10-06 17:13:56
1182
原创 扫描线学习笔记
本文介绍了计算矩形面积并和周长并的算法。对于面积并问题,通过扫描线算法将重叠矩形分解为无重叠部分,使用线段树维护当前覆盖宽度。对于周长并问题,在面积并算法基础上,额外统计独立横线数量并计算竖线长度变化。两种算法的时间复杂度均为O(n log n),适用于大规模数据。文章提供了对应的模板题代码实现,详细说明了线段树的维护方式和统计方法。
2025-07-25 21:24:40
947
原创 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
992
原创 Manacher 学习笔记
本文介绍了求解最长回文子串的两种方法:暴力法和Manacher算法。暴力法通过枚举中心向两侧扩展,复杂度为O(n²)。Manacher算法通过预处理字符串,利用回文对称性优化计算,将复杂度降至O(n)。文章详细说明了Manacher的实现步骤,包括预处理、p数组计算和复杂度分析,并指出该算法不仅能求最长回文子串,还能用于统计回文子串数量等扩展问题。
2025-07-17 22:41:42
1150
原创 KMP 学习笔记
本文介绍了字符串匹配问题及其解决方案。首先,暴力匹配算法通过枚举文本串中的每个位置并逐个比较字符来判断模式串是否出现,但其时间复杂度为 (O(|s| * |t|)),效率较低。随后,文章详细介绍了 KMP 算法,该算法通过预处理模式串的 nxt 数组来记录每个前缀的最长公共前后缀长度,从而在匹配过程中利用已匹配信息跳过不必要的比较,将时间复杂度优化至 (O(n + m))。KMP 算法的核心在于通过 nxt 数组的构建和应用,实现高效的字符串匹配。
2025-07-17 16:55:40
859
原创 Nim 游戏学习笔记
Nim游戏及其阶梯变形的胜负判定方法。公平组合游戏Nim中,n堆石子的异或和为x:若x=0则先手必败,否则必胜。阶梯Nim则将奇数层石子视为普通Nim堆,偶数层不影响结果,只需计算奇数层异或和即可判定胜负。通过分析不同操作对x值的影响,证明了最优策略的存在性。
2025-06-05 22:25:33
1126
原创 一些导致 WA/MLE/TLE 的坑点
本文总结了几个算法竞赛中常见的错误与优化技巧:1.避免使用pow函数计算快速幂以防精度问题;2.节点数多时应使用链式前向星而非vector存图防MLE;3.bool类型不能用%d输入;4.关闭同步流时避免使用递归快写函数;5.注意点双和边双处理时的特殊要求;6.警惕自增运算符在复杂表达式中的使用顺序问题。这些经验教训来自洛谷多道题目的WA/TLE/MLE测试案例。
2025-03-02 21:27:24
717
原创 Tarjan 求解 LCA
本文介绍了使用Tarjan算法离线求解最近公共祖先(LCA)的方法。该算法通过DFS遍历树结构,并利用并查集维护已访问节点的祖先信息。在回溯过程中合并子节点到父节点的集合,当处理查询时,若两点均已访问,则通过并查集快速找到其LCA。算法时间复杂度接近线性(O(nα(n)+Q)),其中α(n)为反阿克曼函数。文中提供了完整的C++实现代码模板,包括邻接表建树、查询处理和异或和计算等核心功能,适用于处理树结构的路径查询问题。该算法高效且易于实现,是解决LCA问题的经典方案。
2025-02-09 22:16:19
502
原创 盘点我那些因概念理解不清而 TLE 的题(洛谷)
本文分享了两个算法优化案例。第一个案例通过Tarjan求强连通分量后采用DFS更新最大值,但遇到DAG结构导致时间复杂度超预期,最终通过改进DFS和标记处理解决了问题。第二个案例在KMP算法实现中,原方案在处理重复字符时出现O(n^2)复杂度,通过调整跳转逻辑优化为线性复杂度。两个案例都体现了对算法核心思想的深入理解以及调试分析的重要性,特别是数据结构特性和边界条件对性能的关键影响,最终通过针对性优化成功解决问题。
2025-02-08 23:07:06
981
原创 Tarjan 与连通性问题
1. 强连通分量的Tarjan算法实现,通过时间戳和栈结构识别强连通子图;2. 缩点操作将同一强连通分量节点合并;3. 割边识别条件及边双连通分量求解;4. 割点判断和点双连通分量求解,处理自环等特殊情况;5. 2-SAT问题的解法,通过建立蕴含图并检查强连通分量进行可行性判断。
2025-02-08 22:17:57
1069
原创 洛谷P2812/P2746解题思路
本文讨论了如何计算有向图中选择最少母机数量及添加最少边数使图强连通的问题。作者使用Tarjan算法进行强连通分量缩点,统计入度为零的强连通分量数目作为母机数量(ans1)。对于添加边数,最初错误地统计出度为零分量数(ans2),后发现需要取入度与出度零分量数的较大值。最终通过特判处理环和孤立点情况,得到正确解法:当图为单个强连通分量时无需加边,否则取max(ans1,ans2)。该解法通过多次修正错误,最终解决了题目要求。
2025-02-08 21:44:58
1188
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅