C++算法技巧
文章平均质量分 85
给大家分享C++的算法技巧,绝对收获满满,快来看
ヾ(•ω•`)o
YLCHUP
博观而约取,厚积而薄发。C++初学蒟蒻一个,和大家一起学习进步,偶尔分享小技巧,加油!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
字符串哈希详解:原理、实现与例题
字符串哈希是一种将字符串映射为固定长度数值的技术,主要用于快速字符串比较和匹配。其核心原理是多项式滚动哈希,通过预处理前缀哈希数组实现O(1)时间复杂度的子串比较。文章详细介绍了C++和Python的实现方法,并提供了最长重复子串和回文子串计数两个经典例题的解决方案。字符串哈希在算法竞赛中应用广泛,合理选择参数可以有效降低冲突概率,是处理字符串匹配、子串比较等问题的有效工具。原创 2025-08-26 16:31:38 · 368 阅读 · 0 评论 -
位运算卡常技巧详解
本文详细介绍了七种高效的位运算优化技巧,包括用移位代替乘除、与操作取模、异或交换变量、无分支绝对值计算等。这些方法利用二进制位操作特性,能显著提升程序性能,尤其适用于性能关键场景。文章强调需权衡可读性与效率,并提醒现代编译器可能自动优化部分操作。合理运用这些技巧可优化代码,但需注意适用范围并添加清晰注释。原创 2025-08-26 16:23:35 · 386 阅读 · 0 评论 -
【联通分量】题解:P13823 「Diligent-OI R2 C」所谓伊人_连通分量_最短路_01bfs_图论_C++算法竞赛
本文提出了一种基于分层图的最短路算法来解决点权交换问题。通过将原图与反图分层构建,并利用01bfs优化,实现了O(m)时间复杂度的解决方案。关键点在于:1)将每个弱连通分量的最大点权点作为起点;2)构建两层图结构处理正向和反向路径;3)使用双端队列优化最短路计算。该方法有效解决了需要多次中转的最小操作次数问题,并通过特判处理了直接可到达的情况。代码实现展示了完整的输入处理、连通分量分析、最短路计算和结果输出流程。原创 2025-08-25 12:59:50 · 874 阅读 · 0 评论 -
《卡常导论》_计算机原理_运行速度优化_算法竞赛C++
《卡常导论:算法竞赛中的高效优化技巧》摘要 本文系统介绍了算法竞赛中15种核心卡常技巧,包括输入输出优化、内联函数、循环展开、缓存友好访问等。通过减少CPU工作量、优化内存访问模式、利用现代计算机体系结构特性,实现在相同时间复杂度下显著提升程序运行速度。文章详细阐述了每种方法的原理与实现示例,同时强调优化前需准确测量性能热点,并注意平衡代码可读性与性能。这些技巧不仅适用于竞赛场景,也能帮助开发者深入理解计算机底层工作原理。原创 2025-08-24 13:20:05 · 1100 阅读 · 0 评论 -
深入浅出【最小生成树】:Prim与Kruskal算法详解
本文介绍了最小生成树(MST)的概念及其两大经典算法:Prim算法和Kruskal算法。Prim算法采用"种树"思想,从一个顶点开始逐步扩展,每次选择连接树与非树节点的最小权重边;Kruskal算法则通过"拼图"方式,按边权重从小到大选择不会形成环的边。两种算法均基于贪心策略,Prim适合稠密图,Kruskal适合稀疏图。文章详细讲解了两种算法的原理、步骤和代码实现,包括C++和Python示例,并分析了它们的应用场景和复杂度。原创 2025-08-22 19:29:59 · 1291 阅读 · 0 评论 -
【生成树+环】题解:P3907 环的异或_图论_环_异或_搜索_算法竞赛_C++
本文探讨了图的环检测问题,提出了一种基于生成树和异或前缀和的高效算法。核心思想是通过构建生成树后检查非树边,利用异或性质快速计算路径权值,实现O(n+m)时间复杂度。文章给出了两种实现方案:一种是优化的生成树方法,无需计算LCA;另一种是暴力DFS遍历。两种方法都能有效判断图中所有环的异或和是否为零,适用于解决相关问题。附带C++代码实现,并提及了带权并查集的替代方案。原创 2025-08-22 19:09:21 · 1101 阅读 · 0 评论 -
【跳表+单调栈】题解:P12646 [KOI 2024 Round 1] 升序 & P12642 [KOI 2024 Round 1] 加倍_数据结构_前缀和_算法竞赛C++
这篇文章介绍了一个关于数组操作次数计算问题的优化解法。文章分为两部分:第一部分分析了一个弱化版问题,通过预处理c数组(表示每个元素需要加倍的最小次数)并处理前缀和来计算答案;第二部分提出了加强版的解法,通过预处理跳转指针和优化求和公式,将时间复杂度从O(nq)优化到O(n + q log w)。核心思路是利用数学变换和跳表结构快速定位非零区间,从而高效处理大规模查询。文章附有详细的代码实现和数学推导过程。原创 2025-08-22 00:05:25 · 1139 阅读 · 0 评论 -
【子集dp】题解:AT_dp_u Grouping_位运算枚举子集_状压dp_C++_算法竞赛
本文介绍了状压DP解决兔子分组问题的思路。通过二进制状态表示兔子选择情况,状态转移考虑两种方式:直接计算当前集合不分组时的收益,或枚举所有子集进行分组转移。关键点在于使用位运算技巧高效枚举子集(j=(j-1)&i),并分析得出时间复杂度为O(3^n)。代码实现了该算法,预处理各状态收益后,通过比较分组与不分组情况的最大值得到最终解。该方法本质上是一种子集DP,适用于处理集合划分的最优化问题。原创 2025-08-18 15:59:50 · 515 阅读 · 0 评论 -
【DFS题解】凑数
这篇文章介绍了如何通过深度优先搜索(DFS)解决一个数学表达式问题。给定n个不同的正整数和一个目标值m,需要在每个数字前添加加号或减号,使表达式结果等于m。文章提供了一个简单的DFS实现方案,并讨论了优化方法(如使用exit提前终止程序)。最后还拓展了如果数字顺序可变时的解法(使用next_permutation)。文章包含完整代码示例和详细解释,适合初学者理解DFS的应用。原创 2025-08-15 15:41:20 · 353 阅读 · 0 评论 -
题解:P11140 [APC001] E - Linear Map_双指针_dp优化_C++_算法竞赛
本文介绍了一个解决字符串分段计数问题的动态规划方法。通过设计状态dp[i]表示前i个位置的分段方案数,采用类似最长上升子序列的转移方式,并优化判定函数的时间复杂度。关键优化包括:利用桶数组判重、发现单调性后使用双指针、以及通过观察得出"有趣"字符串最大长度仅为9的特性,将时间复杂度从O(n^4)优化至O(n)。最终方案采用卡常技巧实现高效计算,适用于处理大规模数据。该问题展示了如何通过逐步优化将复杂问题简化的典型思路。原创 2025-08-15 15:38:28 · 715 阅读 · 0 评论 -
C++ 二分小数
大家学会了二分小数了吧,希望大家要多做题,多练习。二分是算法前期的重点、难点,大家一定要熟练掌握。希望这篇文章能帮到你,掰掰ヾ(•ω•`)o。原创 2025-08-12 19:55:49 · 682 阅读 · 0 评论 -
位运算在算法竞赛中的应用(基于C++语言)_位运算优化
C++算法竞赛中,位运算优化是提升效率的关键技巧。文章介绍了6种常见位运算:与(&)检查位状态、或(|)设置位、异或(^)翻转位、非(~)反转所有位、左移(<<)乘2幂、右移(>>)除2幂。并列举了5个应用实例:生成子集、动态规划状态压缩、快速幂运算、哈希函数计算和位计数。这些方法能显著优化算法的时间和空间复杂度,是竞赛中的重要技巧。原创 2025-07-23 23:14:14 · 482 阅读 · 0 评论 -
题解:P9468 [EGOI 2023] Candy / 糖果
题目要求通过交换相邻元素使得数组前F个元素的和至少为T,求最少交换次数。关键思路是选择F个元素使其总和≥T且原始位置和最小,从而最小化交换次数。通过动态规划维护在不同位置和下的最大数值总和,最终根据满足条件的最小位置和计算所需交换次数。时间复杂度为O(NF5050),适用于N≤100的数据范围。原创 2025-07-23 23:07:40 · 1176 阅读 · 0 评论 -
【C++算法竞赛】前缀和+桶数组
本文介绍了前缀和算法的原理及其应用,通过多个例题展示了前缀和在解决连续区间问题中的巧妙运用。前缀和的核心公式是 (sum(l,r)=s[r]-s[l-1]),利用该公式可以将区间问题转化为统计问题。文中通过"非常男女"计划、等价消除、区间乘积等题目,展示了如何通过前缀和与桶数组结合,将O(n²)暴力解法优化为O(n)的高效解法。特别是对于状态压缩类题目,通过二进制位表示奇偶性,进一步提升了算法效率。最后以Gold Balanced Lineup为例,展示了前缀和差分在处理复杂条件时的应用原创 2025-06-28 11:16:14 · 1115 阅读 · 0 评论 -
【C++算法竞赛】二维前缀和入门
二维前缀和是一种高效计算矩形区域元素总和的技术,通过预处理构建(n+1)×(m+1)的积分数组,将单次查询优化到O(1)时间复杂度。其核心公式为sum[i][j] = sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1] + matrix[i-1][j-1],查询时使用区域和公式sum[x2+1][y2+1] - sum[x2+1][y1] - sum[x1][y2+1] + sum[x1][y1]。该技术在图像处理、计算机视觉和算法竞赛中广泛应用,特别适合需要频繁计算子矩阵和原创 2025-07-01 07:30:00 · 276 阅读 · 0 评论 -
【C++算法竞赛】一维前缀和入门
一维前缀和是一种高效预处理技术,用于快速计算数组区间和。其核心是构建一个累加数组,其中每个元素存储原数组前i项的和。通过递推公式prefix[i] = prefix[i-1] + arr[i-1]在O(n)时间内完成预处理后,任意区间[l,r]的和可在O(1)时间内通过prefix[r+1]-prefix[l]计算得出。该方法显著优化了频繁区间查询场景(如统计分析和子数组问题)的效率,预处理和查询的时间复杂度分别为O(n)和O(1),空间复杂度为O(n)。使用时需注意前缀和数组下标从1开始的特点。原创 2025-06-28 10:54:50 · 378 阅读 · 0 评论 -
题解:P8819 [CSP-S 2022] 星战(随机哈希)
题目要求实现加边和删边操作,并实时判定是否所有点的出度都为1。通过分析,发现这等价于基环树的性质,即所有点出度为1。为了高效维护和判断,采用哈希方法,为每个点分配随机哈希值,动态维护入度和哈希和。通过四种操作(删边、删所有入边、加边、加所有入边)更新哈希和,并判断当前哈希和是否等于初始哈希和,从而判定是否满足条件。最终,通过维护初始哈希和和当前哈希和,实现了高效的动态判定。原创 2025-05-10 17:29:09 · 729 阅读 · 0 评论 -
【C++算法竞赛】dfs序转化+动态树上最短路径 入门教学
基环树 = 正常的树 + 一条边,加上的那一条边会使树成环。找环边: 并查集 or DFS判环遇到基环树的题,一般先不考虑那一条成环的边,看在普通的树上怎么操作,然后在询问时单独计算多出来那条边的贡献就行。所以我们可以先考虑求树上的动态全源最短路。原创 2025-03-15 09:59:51 · 928 阅读 · 0 评论 -
C++ 中的环形线性动态规划
详细讲解了线性dp在环上的应用,有例题、详解和课后习题,内容超级丰富!快来看掰掰原创 2025-02-06 11:34:02 · 856 阅读 · 0 评论 -
求积水问题的三种解法
C++典型搜索例题“积水问题”的详细解法,从入门到优化,还附赠全新解法:并查集!讲解细致,快来看ヾ(•ω•`)o原创 2025-02-06 11:06:45 · 1041 阅读 · 0 评论 -
差值 dp 入门
差值 dp 的入门讲解,深入浅出,例题引导,7000 字倾情奉献,快来看ヾ(•ω•`)o原创 2025-02-03 19:39:13 · 871 阅读 · 0 评论 -
【算法竞赛】相邻差值相等问题的前缀和解法
”相邻差值问题“用前缀和思想解决的详细介绍!原创 2024-11-28 22:45:12 · 912 阅读 · 0 评论 -
题解:十七边形_三角函数_C++算法竞赛
正十七边形这道题的详细讲解,附带三角函数推导过程及证明,保证一看就会!快来看ヾ(•ω•`)o原创 2024-07-30 20:17:33 · 498 阅读 · 0 评论 -
【C++】倍增LCA详解 + P3379 最近公共祖先题解
倍增树上最近公共祖先(LCA)的超详细解释,细致入微,一看就懂,或多或少会为大家带来一些新的思考。快来看ヾ(•ω•`)o原创 2024-07-27 22:46:44 · 1278 阅读 · 0 评论 -
【普及动规】dp例题精讲+强化练习
dp例题精讲+强化练习,每道题都有详细思路解释和题解,快来看ヾ(•ω•`)o原创 2024-07-21 23:23:49 · 1401 阅读 · 0 评论 -
【普及组】广度优先搜索BFS——到达型搜索问题_C++算法竞赛
广搜到达类问题的超详细总结,有例题,保准一看就懂。适合初学者及中等水平阅读,快来看ヾ(•ω•`)o原创 2024-07-21 18:30:44 · 1246 阅读 · 0 评论 -
C++分组背包问题_动态规划dp_背包_算法竞赛
分组背包的详细讲解,附带两道经典例题,讲解得细致、易懂。快来看ヾ(•ω•`)o原创 2024-07-20 23:17:42 · 1547 阅读 · 0 评论 -
【C++&Python&Java】字符处理详细解读_字符_ASCLL码_字母数字转换_算法竞赛_开发语言
C++和Python和Java三语言超全讲解,详细辨析字符的妙用。让你熟练玩转“字符”这一数据类型。快来看ヾ(•ω•`)o原创 2024-07-15 20:47:50 · 4420 阅读 · 0 评论 -
【2024最新】C++读写优化超详细解析(cin优化+普通快读+fread)_输入输出优化_快读快写_算法竞赛
2024最新,超级详细的解读。新手也可以看得懂!一文走进输入输出优化的世界!原创 2024-07-14 23:36:06 · 5250 阅读 · 5 评论 -
【反悔贪心】P2949WorkSchedulingG+P4053[JSOI2007]建筑抢修题解
“反悔贪心”是重要的技巧,本文以例题为引导,带大家深入算法本质,轻松学习。快来看ヾ(•ω•`)o原创 2024-07-13 19:28:06 · 550 阅读 · 0 评论 -
【2024最新】C++扫描线算法介绍+实战例题
扫描线算法的一个介绍,里面有资料很少的一维扫描线,也有丰富的个人试错经验,干货满满。快来看ヾ(•ω•`)o原创 2024-07-13 17:35:23 · 1531 阅读 · 0 评论 -
算法编程中简单取数问题的总结
解决简单的取数问题:取出某个数的前面几位、后面几位、特定位数。快来看ヾ(•ω•`)o原创 2024-05-02 22:32:22 · 1009 阅读 · 2 评论 -
C++中、后缀表达式间的转换及运算方法(附代码,可带括号、小数和负数)
C++实现中、后缀表达式间的相互转换及计算。可以有括号、小数和负数。附源代码及详细注释。原创 2024-02-26 22:54:32 · 635 阅读 · 1 评论 -
C++二分查找算法
本章讲述C++算法设计的重难点——二分查找算法,up主一下午细心整理,绝对干货满满、物超所值!快来看ヾ(•ω•`)o原创 2023-01-20 17:22:29 · 5985 阅读 · 2 评论 -
C++高精度加法
本文将介绍C++最重要的功能之一——高精度运算的加法部分,学会了,你就能进行几百上千位数字的运算,绝对超值,快来看ヾ(•ω•`)o原创 2023-01-06 10:53:05 · 589 阅读 · 0 评论
分享