自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 浅谈字符串算法及练习题

本文介绍了四种字符串处理技术:哈希、字典树、Manacher和KMP算法。哈希通过固定转换将字符串映射为唯一值,用于快速检索;字典树以空间换时间,高效处理字符串前缀;Manacher算法利用动态规划寻找最长回文子串;KMP通过next数组优化字符串匹配。文章还提供了相关练习题及代码实现,如利用哈希统计子串、使用KMP求重复子串的最小长度等。最后作者幽默吐槽"我讨厌哈希",但全文内容详实,涵盖算法原理、代码实现和应用场景。

2026-07-23 19:26:41 193

原创 数位dp算法解析

本文介绍了数位DP算法的核心思想与实现模板,通过记忆化搜索方式解决大范围数字统计问题。文章提供了通用模板代码,并展示了6道典型例题的解题思路和关键代码片段(包括数字计数、二进制问题、手机号码校验等),重点讲解了如何处理前导零、数位限制、特殊约束条件等问题。作者还特别强调了全局记忆化的重要性,并通过具体例题(如CF55D)演示了如何优化处理最小公倍数等复杂约束条件,体现了数位DP在处理大范围数字统计问题上的高效性和灵活性。

2026-07-02 20:09:24 200

原创 数列分块入门&莫队模板详解

本文介绍了数列分块和莫队算法两种基于分块思想的数据处理方法。数列分块通过将数列划分为若干块,对完整块整体处理、非完整块暴力处理,实现了高效的区间操作,时间复杂度为O(n√n)。文章详细讲解了分块的基本思想、实现步骤和代码模板,并提供了多个数列分块的应用实例,包括区间加减、查询、模运算、开平方等操作。莫队算法则利用分块思想对查询离线排序,通过逐步调整区间边界来高效处理区间查询问题。文章还介绍了分块重构技巧和带标记的分块处理方法。这些方法为解决大规模数据操作问题提供了有效方案,在保证时间效率的同时简化了实现难度

2026-06-12 16:55:23 68

原创 C++基础数论

本文介绍了数论中求逆元的五种方法:费马小定理(适用于模数为质数)、拓展欧几里得算法(通用解法)、顺推法(求连续数的逆元)、逆推法(通过阶乘求逆元)以及前后缀乘积法(结合快速幂)。此外还讲解了整除性质、欧拉函数及其反演、同余定理(欧拉定理和费马小定理)以及中国剩余定理的原理与应用。文章通过推导公式和代码示例,系统总结了数论基础知识,适合初学者系统学习数论内容。

2026-05-22 22:15:02 96

原创 连通性问题及练习题详解(未完工)

本文系统讲解了图论中的强连通分量、缩点、割点/割边、点双/边双连通分量等概念及其算法实现。主要内容包括: Tarjan算法求强连通分量(SCC)的模板代码实现 缩点技术的应用场景和实现方法 割点与割边的判定条件和算法实现 点双和边双连通分量的求解方法 典型例题分析(如P2746、P2431等)展示了这些算法在实际问题中的应用 文章结合代码示例详细说明了各算法的实现细节,并提供了多个练习题供读者实践。这些内容为处理有向图和无向图中的连通性问题提供了系统的方法论和实用工具。

2026-04-28 21:06:49 91

原创 拓扑排序详解

本文介绍了拓扑排序的基本原理和应用。通过图示说明拓扑排序的核心思想是每次遍历入度为0的节点,逐步处理整个有向无环图。文章提供了拓扑排序的模板代码实现,并举例说明如何应用于实际问题如P4017最大食物链计数。该问题通过拓扑排序结合动态规划求解,转移方程为dp[y]=(dp[y]+dp[x])%mod,最终累加所有出度为0的节点得到答案。作者强调拓扑排序是算法中较为简单但实用的内容,适合作为入门学习。

2026-04-19 16:29:28 53

原创 树上问题详解

本文总结了树形结构相关算法题的解题思路,包括树的直径、树的重心和带权树重心三个经典问题。对于树的直径,介绍了两次DFS/BFS法和动态规划法;对于树的重心,讲解了通过遍历子树判断最大连通分量的方法;对于带权树重心,提出了换根DP的解决方案。每种方法都配有核心代码片段,并强调了排序去重等细节处理。文章以简洁幽默的风格呈现了树形问题的解题技巧,适合算法学习者快速掌握相关知识点。

2026-04-12 20:33:26 201

原创 线段树详解及练习

本文更新线段树及题目解法喵~

2026-04-04 15:25:04 267

原创 树状数组及练习题解析

本文介绍了树状数组的原理和应用。通过图示解释了树状数组的管理区间机制,详细讲解了区间增减和区间查询的实现方法(使用lowbit运算和差分技巧)。提供了两个模板题的解法(P3374和P3368),并给出逆序对问题(P1908)和三元上升子序列问题(P1637)的树状数组解法,其中涉及离散化处理。文章以简洁的代码示例展示了树状数组在解决统计问题中的高效性,适合算法初学者学习。

2026-03-30 22:00:01 365

原创 树形dp以及练习题洛谷P2052、P15801、P14919、P1352、P2016、P1122、P3478、P2014、P4084、P2458题解

本文介绍了树形动态规划(树形DP)的基本概念和解题方法。首先概述了DP的三个特征(最优子结构、重叠子问题、无后效性)和五个步骤。然后详细讲解了树形DP的实现方法,包括树的存储方式(邻接表、链式前向星)和遍历方式(前序、中序、后序遍历)。文章通过8道典型题目(P2052、P15801、P2016、P1122、P1352、P14919、P3478、P2014、P4084、P2458)展示了树形DP的应用,每道题都包含题意解析、解题思路和完整代码实现。这些题目涵盖了树形DP的常见类型,如子树统计、节点选择、路径覆

2026-03-22 17:14:14 104

原创 洛谷P14923、P11967、P10289、P10725、P13019、P13020、P10726、P10264、P14924题解

本文整理了9道8级编程题解,主要涉及图论和树形结构算法。内容包括:1) 无向图安全节点判断(Dijkstra应用);2) 树形差分处理点对连通性;3) 带传送门的LCA最短路径;4) 树形DP求异色节点最远距离;5) 倍增法处理树上移动;6) 树遍历序列计数;7) 挡板掉落时间计算;8) 卡牌消除的倍增优化;9) 环形宝石分段的倍增解法。所有题目均给出核心思路和完整代码,涵盖Dijkstra、树形DP、LCA、倍增等典型算法,适合8级考试复习参考。

2026-03-07 18:59:56 153

原创 洛谷P2330题解

题目要求将n个节点通过m条边连通,满足:1) 形成连通图;2) 使用最少边数;3) 最大边权最小。这实质是求最小生成树问题。使用Kruskal算法,按边权排序后依次选择边进行合并,直到形成包含n-1条边的树。最终输出选用的边数n-1和其中最大边权值。时间复杂度主要由排序决定,为O(mlogm)。代码实现了并查集优化的Kruskal算法,简洁高效地解决了该问题。

2026-03-07 09:37:53 37

原创 洛谷P1550题解

摘要:题目要求连接n块田地,每块田地i和j连接需要p[i][j]元,或在i处打井需要w[i]元。通过将打井视为与虚拟水源(n+1)连接,将问题转化为包含n+1个点的最小生成树问题。使用Kruskal算法,将所有边(包括田地间连接边和打井边)排序后,按权值从小到大选择边,使用并查集维护连通性,直到所有点连通。最终输出最小总费用。

2026-03-06 19:00:44 12687

原创 洛谷P12158题解

摘要:题目要求连接n个圆形区域,若两圆重叠则自然连通,否则需要建造道路。解题思路是计算所有圆对之间的最短连接距离(圆心距离减去半径和,若为负则取0),然后用Kruskal算法求最小生成树。最终输出使所有圆连通所需的最少道路总长度,保留两位小数。代码实现了距离计算、并查集和Kruskal算法来求解该问题。

2026-03-05 21:42:28 164

原创 洛谷P2121题解

摘要:题目要求在n个点和m条边的无向图中,最多保留k条边且无环的情况下,使边权总和最大。解法采用Kruskal算法变种,将边按权值降序排序后构建最大生成树,当选取k条边时终止。代码使用并查集实现连通性检查,时间复杂度主要由排序决定。最终输出选取的k条边的最大权值和。

2026-03-03 19:28:37 253

原创 洛谷P1194题解

摘要:题目要求在购买b件物品时,每件基础价格a元,同时存在优惠关系k[i][j]。解法是将每个物品与虚拟节点0相连(权值a),并建立优惠边,使用Kruskal算法求最小生成树。代码实现了并查集优化,初始化后排序边,累计最小花费。最终输出总花费即为最优解。

2026-03-02 18:29:56 157

原创 洛谷P1396 题解

摘要:题目要求在n个点m条边的图中,找到从s到t的最短路径中的最大边权。解题思路是使用Kruskal算法构建最小生成树,当s和t首次连通时,当前处理的边权即为所求最大值。代码实现包括:初始化并查集、按边权排序、逐步合并连通分量,当检测到s和t连通时立即输出当前边权并结束程序。该方法巧妙地利用最小生成树性质解决了最短路中的最大权值问题。

2026-03-01 10:45:30 332

原创 洛谷P2419题解

摘要:该算法使用Floyd算法确定奶牛之间的相对排名关系。通过构建关系矩阵并进行传递闭包运算,能够判断任意两头奶牛之间的先后顺序。最后统计每头奶牛能否确定与其他所有奶牛的关系,从而得出可确定排名的奶牛数量。算法时间复杂度为O(n^3),适用于解决奶牛排名问题。

2026-02-26 10:03:06 292

原创 2026.2.21

本文总结了六道编程题的解题思路:1)T1通过拆分数组计算方程;2)T2利用前缀和优化平方和计算;3)T3使用贪心+DP解决区间选择问题;4)T4采用三维DP统计乘积结果;5)T5通过质数筛和DP求解最小操作次数;6)T6用BFS处理液体分配问题。作者在总结中强调需要加强前缀和与动态规划的训练,并反思了部分题目存在的WA问题。

2026-02-21 23:02:49 79

原创 bitset优化Floyd(洛谷P4306)

本文介绍了一种使用bitset优化Floyd算法的方法。通过将邻接矩阵转换为bitset表示,可以高效计算图的传递闭包。核心思路是枚举中间点k和起点i,若i可达k,则将i的可达集合与k的可达集合进行或运算。这种方法显著降低了时间复杂度,使O(n^3)的Floyd算法得到优化。代码示例展示了如何使用bitset实现该算法,并统计所有可达节点对的数量。bitset的位运算特性使其成为处理大规模图的高效工具。

2026-02-21 11:45:22 41

原创 C++S组学习——Prim

本文介绍了Kruskal算法的最小生成树实现。通过邻接表存储图结构,初始化距离数组后,循环查找当前最小距离节点并标记访问。若发现不可达节点则输出错误信息,否则更新邻接节点的距离值并累加生成树权重。最后输出最小生成树的总权重或不可达提示"orz"。算法核心是贪心地选择最小边来构建生成树。

2026-02-20 14:52:28 74

原创 C++S组学习——Kruskal

本文介绍了Kruskal算法求最小生成树的方法。首先判断图的连通性,初始化各节点父节点,并按边权排序。算法核心是遍历排序后的边,若边的两端不在同一连通块则连接,累加权值直至形成生成树。文章提供了完整的C++代码实现,包括预处理、Kruskal算法主体和结果输出。代码使用并查集优化连通性判断,当边数达到n-1时提前终止循环,最终输出最小生成树的总权值。若图不连通则输出"orz"。

2026-02-20 09:22:04 67

原创 C++S组学习——Floyd

本文介绍了Floyd算法求解多源最短路径问题。通过动态规划思想,将问题转化为状态转移方程,并用三重循环实现。文章以B3647为例,给出了完整的C++代码实现,包括图的初始化、Floyd算法核心部分以及结果输出。该算法时间复杂度为O(n³),适合解决中等规模的图论问题。代码简洁明了,适合算法初学者学习和参考。

2026-02-19 18:00:33 57

原创 C++S组学习——SPFA

本文介绍了SPFA算法的原理与实现。SPFA通过队列优化Bellman-Ford算法,初始化时将起点距离设为0,其余为无穷大。算法不断从队列取出节点进行松弛操作,若邻居距离被更新且不在队列中则入队。时间复杂度平均O(km),最坏O(nm),可处理负边权并检测负环。文章提供了P3385题目的完整C++实现代码,包含初始化、边添加和SPFA核心逻辑。最后提醒读者优先学习Dijkstra算法而非SPFA,因为后者效率不稳定。

2026-02-19 11:21:45 349

原创 C++S组学习——Dijkstra

摘要:本文介绍了Dijkstra算法求解单源最短路径的实现过程。从固定起点开始,逐步松弛更新邻接点距离,每次选择当前最小距离点进行扩展。文章展示了算法执行步骤的表格演示,并提供了基于优先队列优化的C++代码实现(洛谷P4779),将时间复杂度从O(n²)优化到更高效。代码包含图的邻接表存储、距离初始化、优先队列处理等关键步骤,最后输出起点到各点的最短距离。

2026-02-18 16:41:03 681

原创 2026.2.15

本文分享了6道编程题的解题思路和代码实现。T1使用前缀异或和与哈希表统计满足条件的子数组数量;T2通过排序和前缀和计算最小总距离;T3利用质数性质和快速幂求解排列组合问题;T4建议用BFS或Dijkstra算法;T5采用优先队列实现合并果子问题;T6为LCA模板题。作者总结需要加强图论知识学习,整体解题效果良好。各题解法涉及异或运算、前缀和、排序、快速幂、优先队列等算法技巧。

2026-02-15 16:16:50 87

原创 2026.2.14

本文记录了6道算法题的解题思路与代码实现。T1通过求gcd优化计算;T2采用约瑟夫问题的规律解法;T3使用动态规划处理矩阵路径余数问题;T4尝试用DP处理数字序列但效果不佳;T5运用状态转移DP解决技能组合问题;T6成功实现树形DP解决节点选择问题。作者总结道虽然DP很有趣,但下次不想再用了(最后以"喵喵喵"和"哇哈哈"的拟声词结尾)。所有代码均使用C++实现,展现了从数学优化到动态规划等多种算法技巧。

2026-02-14 12:33:27 78

原创 2026.2.13

本文记录了作者在1.5小时内完成6道编程题(总分540)的解题过程。题目主要涉及动态规划(DP)应用,包括基础DP(T3、T5)、思维型DP(T4)和状压DP(T6)。其中T1-T4均为签到题,T5虽基础但调试耗时,T6因数据规模导致部分超时。作者特别强调DP在解题中的核心地位(6题中4题使用DP),并分享了各题的解题思路与关键代码片段,最终以高效的表现完成全部题目。

2026-02-13 22:33:22 528

原创 2026.2.12

本文总结了6道编程题的解题思路:T1直接枚举配合map求最大值;T2因map使用不当导致TLE,应枚举a和2的幂;T3通过埃氏筛法预处理答案;T4通过排序后双指针计算满足条件的组合数;T5是标准BFS模板题;T6采用DFS或二进制转换两种解法,需注意数据范围。其中T2和T6因实现不当导致部分分数损失,强调了正确选择算法和注意数据范围的重要性。

2026-02-12 22:40:50 201

原创 2026.2.11

本文总结了6道编程题的解题思路:T1通过5进制转换解决;T2采用分块处理;T3利用前缀和计算;T4通过时间区间合并获得部分分;T5使用位运算构造解法;T6运用矩阵快速幂实现DP优化。作者强调部分分策略在竞赛中的重要性,通过部分分可能显著提升总分(如300到430分),建议在CSP等比赛中重视部分分获取。其中T5和T6因复杂度问题未完全通过,但展示了不同解题方法。

2026-02-11 22:14:24 227

原创 2026.2.10

本文总结了六道算法题的解题思路:T1通过判断最小公约数解决互质问题;T2利用坐标差最大值计算相遇步数;T3尝试排序后枚举求最小值;T4通过二进制按位或运算判断可行性;T5使用双指针求最长子串;T6用组合数学计算方案数。其中四题AC,两题WA,涉及数论、贪心、双指针等算法,强调了快速幂和取模的重要性。解题过程展现了多种算法思想的应用,体现了算法竞赛中需要全面考虑问题特性并选择合适解法。

2026-02-10 21:19:55 396

空空如也

空空如也

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

TA关注的人

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