- 博客(92)
- 收藏
- 关注
原创 【二分图+栈排序】题解:P1155 [NOIP2008 提高组] 双栈排序_二分图染色_贪心_模拟_C++算法竞赛
本文研究了双栈排序问题,通过二分图染色和贪心策略给出了解决方案。首先分析单栈排序的限制条件,引入后缀最小值优化冲突检测。然后将问题转化为二分图染色问题,确保冲突元素进入不同栈。在模拟过程中,采用贪心策略保证字典序最小的操作序列。算法主要包括预处理、二分图判定、栈模拟三个阶段,时间复杂度为O(n²)。对于无法排序的情况输出0,否则输出字典序最小的操作序列。
2025-08-27 12:07:49
1081
原创 【数学分块】题解:P13831 【MX-X18-T3】「FAOI-R6」比亚多西_二分查找_整除分块_数学推导_算法竞赛C++
本文探讨了二分查找次数函数f(n)的递推关系及其区间和计算。作者通过构建二叉搜索树模型,证明f(n)=f(n-1)+⌊log₂n⌋+1。基于该性质,将区间和转化为前缀和差s(R)-s(L-1),并利用对数分块和等差数列求和优化计算。给出C++实现,使用int128处理大数取模,时间复杂度为O(log R)。代码通过预处理2的幂次和模运算优化,最终高效求解给定区间[L,R]内f(i)的和。
2025-08-27 12:04:56
1057
原创 字符串哈希详解:原理、实现与例题
字符串哈希是一种将字符串映射为固定长度数值的技术,主要用于快速字符串比较和匹配。其核心原理是多项式滚动哈希,通过预处理前缀哈希数组实现O(1)时间复杂度的子串比较。文章详细介绍了C++和Python的实现方法,并提供了最长重复子串和回文子串计数两个经典例题的解决方案。字符串哈希在算法竞赛中应用广泛,合理选择参数可以有效降低冲突概率,是处理字符串匹配、子串比较等问题的有效工具。
2025-08-26 16:31:38
375
原创 位运算卡常技巧详解
本文详细介绍了七种高效的位运算优化技巧,包括用移位代替乘除、与操作取模、异或交换变量、无分支绝对值计算等。这些方法利用二进制位操作特性,能显著提升程序性能,尤其适用于性能关键场景。文章强调需权衡可读性与效率,并提醒现代编译器可能自动优化部分操作。合理运用这些技巧可优化代码,但需注意适用范围并添加清晰注释。
2025-08-26 16:23:35
397
原创 【联通分量】题解:P13823 「Diligent-OI R2 C」所谓伊人_连通分量_最短路_01bfs_图论_C++算法竞赛
本文提出了一种基于分层图的最短路算法来解决点权交换问题。通过将原图与反图分层构建,并利用01bfs优化,实现了O(m)时间复杂度的解决方案。关键点在于:1)将每个弱连通分量的最大点权点作为起点;2)构建两层图结构处理正向和反向路径;3)使用双端队列优化最短路计算。该方法有效解决了需要多次中转的最小操作次数问题,并通过特判处理了直接可到达的情况。代码实现展示了完整的输入处理、连通分量分析、最短路计算和结果输出流程。
2025-08-25 12:59:50
889
原创 《卡常导论》_计算机原理_运行速度优化_算法竞赛C++
《卡常导论:算法竞赛中的高效优化技巧》摘要 本文系统介绍了算法竞赛中15种核心卡常技巧,包括输入输出优化、内联函数、循环展开、缓存友好访问等。通过减少CPU工作量、优化内存访问模式、利用现代计算机体系结构特性,实现在相同时间复杂度下显著提升程序运行速度。文章详细阐述了每种方法的原理与实现示例,同时强调优化前需准确测量性能热点,并注意平衡代码可读性与性能。这些技巧不仅适用于竞赛场景,也能帮助开发者深入理解计算机底层工作原理。
2025-08-24 13:20:05
1113
原创 题解:P13822 「Diligent-OI R2 B」白露为霜_奇偶性_数学归纳_算法竞赛C++
本文证明了当且仅当两个数组的奇偶性相同时,可以通过特定操作相互转换。核心思路是将问题转化为奇偶性判断,通过数学归纳法构造操作方案。文章还给出了C++实现,并提醒注意边界条件(n=1)和优化输入效率。证明包含必要性和充分性两部分,确保结论的正确性。
2025-08-24 11:36:50
383
原创 【CSP初赛】程序阅读3
该程序使用埃氏筛法找出50以内的素数(2,3,5...47),共15个。程序分析表明:1)数组越界会导致错误;2)初始化不可省略;3)只输出15个数;4)第11个数是31。时间复杂度为O(n log log n),第14个数是43。考察了埃氏筛法的实现原理和边界条件处理。
2025-08-23 21:07:01
1101
原创 题解:P13754 【MX-X17-T3】Distraction_逆序对_前缀和_Ad-hoc_算法竞赛C++
摘要 本文分析了一道关于01序列翻转的算法题。通过将原排列转换为01序列,问题转化为寻找一个偶数长度的区间进行翻转,使得序列中1的个数最大化。关键步骤包括: 利用排列性质将初始贡献计算简化为(i + p_i) mod 2 将问题转化为最大子段和问题,要求区间长度为偶数 使用前缀和及奇偶位置最小值优化计算 实现O(n)时间复杂度的解法 最终解法通过预处理和线性扫描高效求解,适用于大规模数据。
2025-08-23 21:05:34
367
原创 深入浅出【最小生成树】:Prim与Kruskal算法详解
本文介绍了最小生成树(MST)的概念及其两大经典算法:Prim算法和Kruskal算法。Prim算法采用"种树"思想,从一个顶点开始逐步扩展,每次选择连接树与非树节点的最小权重边;Kruskal算法则通过"拼图"方式,按边权重从小到大选择不会形成环的边。两种算法均基于贪心策略,Prim适合稠密图,Kruskal适合稀疏图。文章详细讲解了两种算法的原理、步骤和代码实现,包括C++和Python示例,并分析了它们的应用场景和复杂度。
2025-08-22 19:29:59
1304
原创 【生成树+环】题解:P3907 环的异或_图论_环_异或_搜索_算法竞赛_C++
本文探讨了图的环检测问题,提出了一种基于生成树和异或前缀和的高效算法。核心思想是通过构建生成树后检查非树边,利用异或性质快速计算路径权值,实现O(n+m)时间复杂度。文章给出了两种实现方案:一种是优化的生成树方法,无需计算LCA;另一种是暴力DFS遍历。两种方法都能有效判断图中所有环的异或和是否为零,适用于解决相关问题。附带C++代码实现,并提及了带权并查集的替代方案。
2025-08-22 19:09:21
1113
原创 【CSP初赛】程序阅读15
本文解析了一道C++递归程序题,要求计算func(5,6)的值。通过打表法从小到大的逐步计算,得出当n=5、m=6时,程序输出4433。题目改编自NOIP2018,将原递归公式中的减法改为加法,解题时需注意运算符号变化。打表过程中需保证计算准确性,最终验证程序输出结果为4433。
2025-08-22 00:06:24
223
原创 【跳表+单调栈】题解: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
1150
原创 【CSP初赛】程序阅读9
该程序通过统计输入的每个数的所有因数出现次数,找出对于每个i≤n时最大的p使得至少有i个数的因数是p。判断题解析:1.正确,数组越界会导致RE;2.正确,全局变量默认初始化为0;3.正确,最坏情况下时间复杂度为O(n√n),n=1e6时会超时;4.正确答案是A,dp[1]~dp[4]分别为4,2,1,1;5.正确答案是C,p记录最大值81;6.正确答案是A,输出为81,27,9,9。程序通过动态规划统计因数出现次数,最后逆向查找满足条件的最大值。
2025-08-18 16:01:29
274
原创 【子集dp】题解:AT_dp_u Grouping_位运算枚举子集_状压dp_C++_算法竞赛
本文介绍了状压DP解决兔子分组问题的思路。通过二进制状态表示兔子选择情况,状态转移考虑两种方式:直接计算当前集合不分组时的收益,或枚举所有子集进行分组转移。关键点在于使用位运算技巧高效枚举子集(j=(j-1)&i),并分析得出时间复杂度为O(3^n)。代码实现了该算法,预处理各状态收益后,通过比较分组与不分组情况的最大值得到最终解。该方法本质上是一种子集DP,适用于处理集合划分的最优化问题。
2025-08-18 15:59:50
528
原创 【DFS题解】凑数
这篇文章介绍了如何通过深度优先搜索(DFS)解决一个数学表达式问题。给定n个不同的正整数和一个目标值m,需要在每个数字前添加加号或减号,使表达式结果等于m。文章提供了一个简单的DFS实现方案,并讨论了优化方法(如使用exit提前终止程序)。最后还拓展了如果数字顺序可变时的解法(使用next_permutation)。文章包含完整代码示例和详细解释,适合初学者理解DFS的应用。
2025-08-15 15:41:20
356
原创 题解:P11140 [APC001] E - Linear Map_双指针_dp优化_C++_算法竞赛
本文介绍了一个解决字符串分段计数问题的动态规划方法。通过设计状态dp[i]表示前i个位置的分段方案数,采用类似最长上升子序列的转移方式,并优化判定函数的时间复杂度。关键优化包括:利用桶数组判重、发现单调性后使用双指针、以及通过观察得出"有趣"字符串最大长度仅为9的特性,将时间复杂度从O(n^4)优化至O(n)。最终方案采用卡常技巧实现高效计算,适用于处理大规模数据。该问题展示了如何通过逐步优化将复杂问题简化的典型思路。
2025-08-15 15:38:28
718
原创 C++ 二分小数
大家学会了二分小数了吧,希望大家要多做题,多练习。二分是算法前期的重点、难点,大家一定要熟练掌握。希望这篇文章能帮到你,掰掰ヾ(•ω•`)o。
2025-08-12 19:55:49
687
原创 题解:P12505 「ROI 2025 Day2」充实的假期
摘要 本文介绍了解决洛谷P12505"充实休假日"问题的多种方法。问题要求通过最多调休k天,使得连续休息天数最大化。针对不同数据规模,提出了多种解法:对于全0情况直接判断;对于k=0时统计原始连续休息日;对于小规模数据采用爆搜;对于特定模式字符串采用数学计算;对于k=1情况预处理左右连续休息日长度;最后提出正解——贪心策略优先处理"101"模式,其次"01/10"模式。各种解法均给出了详细代码实现和思路分析,展示了从部分分到正解的完整解题过程。
2025-08-12 19:54:19
721
原创 题解:P4447 [AHOI2018初中组] 分组
本文探讨了如何将队员按实力值分组,使得每个组的实力值连续且不重复,并最大化人数最少组的人数。第一种解法通过排序后使用multiset动态维护各组信息,贪心地将每个数分配到合适的组。第二种解法采用数形结合思路,利用map统计各实力值出现次数,通过不断延伸连续段并递减计数来寻找最优解。两种方法的时间复杂度均为O(n log n),适用于n≤1e5的数据规模。最终输出所有组中最小组人数的最大值。
2025-08-02 23:19:16
676
原创 位运算在算法竞赛中的应用(基于C++语言)_位运算优化
C++算法竞赛中,位运算优化是提升效率的关键技巧。文章介绍了6种常见位运算:与(&)检查位状态、或(|)设置位、异或(^)翻转位、非(~)反转所有位、左移(<<)乘2幂、右移(>>)除2幂。并列举了5个应用实例:生成子集、动态规划状态压缩、快速幂运算、哈希函数计算和位计数。这些方法能显著优化算法的时间和空间复杂度,是竞赛中的重要技巧。
2025-07-23 23:14:14
487
原创 题解:P9468 [EGOI 2023] Candy / 糖果
题目要求通过交换相邻元素使得数组前F个元素的和至少为T,求最少交换次数。关键思路是选择F个元素使其总和≥T且原始位置和最小,从而最小化交换次数。通过动态规划维护在不同位置和下的最大数值总和,最终根据满足条件的最小位置和计算所需交换次数。时间复杂度为O(NF5050),适用于N≤100的数据范围。
2025-07-23 23:07:40
1183
原创 1.4 洛谷入门一题单全解
本文介绍了编程入门阶段的表达式概念和基础输入输出练习题,包括洛谷平台的多个入门题目。文章详细讲解了如何用C++、C和Python实现字符图形输出、A+B问题、字符转换、数字反转等基础编程任务,并提供了多种解题思路和代码示例。特别强调了数据类型转换、数学运算和格式化输出等关键知识点,帮助初学者掌握基础编程技能。所有题目都配有完整的代码实现和解题分析,适合编程新手作为入门练习。
2025-07-09 22:22:13
970
原创 题解:P13017 [GESP202506 七级] 线图
摘要:线图L(G)的顶点对应原图G的边,当两条边在原图中共享顶点时,其对应的线图顶点相连。线图的边数等于原图中所有顶点度数组合数之和,计算公式为∑(d(v)×(d(v)-1)/2)。文中给出了对应的C++代码实现,通过统计顶点度数并计算组合数之和来求解线图的边数。
2025-07-09 22:19:32
430
原创 【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
288
原创 【C++算法竞赛】前缀和+桶数组
本文介绍了前缀和算法的原理及其应用,通过多个例题展示了前缀和在解决连续区间问题中的巧妙运用。前缀和的核心公式是 (sum(l,r)=s[r]-s[l-1]),利用该公式可以将区间问题转化为统计问题。文中通过"非常男女"计划、等价消除、区间乘积等题目,展示了如何通过前缀和与桶数组结合,将O(n²)暴力解法优化为O(n)的高效解法。特别是对于状态压缩类题目,通过二进制位表示奇偶性,进一步提升了算法效率。最后以Gold Balanced Lineup为例,展示了前缀和差分在处理复杂条件时的应用
2025-06-28 11:16:14
1119
原创 【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
386
原创 题解:P11501 [ROIR 2019] 探险队(Day 2)
本文提出了一种基于拓扑排序和动态规划的算法来解决基环树上的最大点独立集问题。算法首先通过拓扑排序处理非环部分,计算每个节点的子树最大独立集;然后针对环上的节点,采用两种限制条件(强制不选首节点或尾节点)分别进行DP,最终整合结果。该方法有效解决了基环树结构中相邻节点不能同时选择的约束问题,时间复杂度为线性。代码实现中详细处理了拓扑排序、子树DP和环上DP三个关键环节,确保算法的正确性和高效性。
2025-06-21 21:54:21
478
原创 P5684 [CSP-J2019 江西] 非回文串 题解
题目要求计算给定字符串的非回文排列数。解题思路采用正难则反的方法,用全排列数减去回文排列数。首先统计各字符出现次数,若超过一个字符出现奇数次则直接输出全排列n!;否则计算回文排列数:对于全偶数字符,按对称性计算组合数;对于存在奇数字符,先固定中间位置再对称处理。使用预处理阶乘和逆元优化计算。最终答案通过(n! - 回文数 + mod) % mod得到,避免负数结果。时间复杂度主要取决于预处理阶乘的O(n)和快速幂的O(log n)。
2025-06-02 20:30:36
348
原创 题解:P8819 [CSP-S 2022] 星战(随机哈希)
题目要求实现加边和删边操作,并实时判定是否所有点的出度都为1。通过分析,发现这等价于基环树的性质,即所有点出度为1。为了高效维护和判断,采用哈希方法,为每个点分配随机哈希值,动态维护入度和哈希和。通过四种操作(删边、删所有入边、加边、加所有入边)更新哈希和,并判断当前哈希和是否等于初始哈希和,从而判定是否满足条件。最终,通过维护初始哈希和和当前哈希和,实现了高效的动态判定。
2025-05-10 17:29:09
743
原创 NOI 2025 大纲更新:算法竞赛的新风向标
总体来看,2025 版 NOI 大纲的变化体现了竞赛对选手能力要求的全面提升。从编程语言的规范性到数据结构的优化,从算法策略的深度拓展到数学知识的深化理解,这些变化都要求选手们在备战过程中更加注重知识的系统性和完整性。同时,这些变化也为我们指明了未来竞赛的发展方向,即更加注重选手在解决实际问题时的综合能力和创新思维。对于选手们来说,及时了解和适应这些变化至关重要。建议选手们仔细研读 2025 版大纲,结合 2023 版大纲进行对比学习,明确自己的学习重点和方向。
2025-05-05 15:13:12
1902
原创 【C++算法竞赛】dfs序转化+动态树上最短路径 入门教学
基环树 = 正常的树 + 一条边,加上的那一条边会使树成环。找环边: 并查集 or DFS判环遇到基环树的题,一般先不考虑那一条成环的边,看在普通的树上怎么操作,然后在询问时单独计算多出来那条边的贡献就行。所以我们可以先考虑求树上的动态全源最短路。
2025-03-15 09:59:51
938
原创 2025.2.8 寒假综合训练赛2题解
模拟赛题解。里面有从题目观察到思路推导再到代码实现的详细过程,题目包含博弈论、思维枚举、dp,讲解深入浅出,保证看完会有收获!快来看ヾ(•ω•`)o
2025-02-10 18:11:03
1056
原创 【CSP初赛】2024初赛练习-完善程序(1)
2024初赛练习-完善程序(1)的讲解,一道有关二分查找的小题,细节还是有点的,欢迎大家观看!ヾ(•ω•`)o
2024-08-08 17:48:39
913
原创 【CSP初赛】2024初赛练习-阅读程序(1)
2024CSP初赛练习-阅读程序(1)的详细讲解,有关斐波那契数列的一道小题,欢迎大家观看!ヾ(•ω•`)o
2024-08-08 17:36:19
1096
空空如也
C++Qt和PyQt同时安装Qt designer
2024-01-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅