- 博客(42)
- 收藏
- 关注
原创 P1041题解
摘要:本文提出了一种基于搜索的算法来解决特定图论问题。算法核心思想是将原始图转换为树结构,通过Dijkstra算法计算节点到根的距离作为感染时间。然后采用DFS遍历,在每一层选择保护某个子树来最大化存活节点数。算法使用标记数组记录保护状态,通过回溯方式暴力搜索所有可能的保护组合。该方法虽然时间复杂度较高,但通过巧妙的问题转化和剪枝策略实现了有效求解,最终输出最小感染节点数。
2025-10-22 19:07:17
188
原创 P1040题解
【摘要】本文介绍了一道基于中序遍历的区间DP问题。通过定义dp[i][j]表示序列i到j的最大值,利用区间DP算法求解最优二叉搜索树。关键点在于记录每个区间的根节点,以便后续输出前序遍历结果。算法的时间复杂度为O(n^3),实现了最大值计算和前序遍历输出。代码展示了完整的实现过程,包括初始化、状态转移和递归输出前序序列。
2025-10-18 17:25:04
187
原创 ABC426A-D+F题解
本文分享了5道编程竞赛题的解题思路与实现代码。A题通过map维护名字等级进行简单比较;B题使用map统计字符出现次数找出唯一字符;C题利用差分数组高效处理批量电脑升级操作;D题分析字符串操作规律计算最小操作次数;F题采用线段树优化区间查询。题目难度从简单到中等,覆盖了基础数据结构与算法应用。
2025-10-08 16:56:55
447
原创 P2801题解
本文提出了一种分块算法解决区间修改和查询问题。通过将数组分为多个块,预处理时对每个块内元素排序。对于区间修改,整块采用懒标记处理,散块则暴力修改后重新排序;查询时,整块使用二分查找,散块暴力统计。算法实现了O(√n)的复杂度,适用于大规模数据。关键点包括正确处理懒标记、散块处理和整块查询的优化。代码实现展示了分块、排序、修改和查询的具体操作。
2025-10-05 16:00:00
237
原创 P13978题解
这篇文章介绍了一个分块算法实现,用于处理区间修改和查询问题。作者采用了以下方法:将数据分块并排序,修改时对整块加懒标记、散块暴力修改后重排序;查询时对整块二分查找、散块暴力遍历。文章提醒了注意事项:1.不能忘记分块处理;2.二分查找时要注意边界条件。最后作者自嘲因为没写build函数而不得不优化代码性能。
2025-10-05 10:24:27
229
原创 P13977题解
本文介绍了一种使用分块算法解决数列查询问题的方案。通过将数列分块并维护有序向量,实现了区间修改和查询操作。对于区间修改,采用标记处理整块、暴力处理散块的方法;对于查询操作,在整块中使用二分查找高效统计,散块则暴力处理。相比线段树,该方法更易实现且不易出错,特别适合处理复杂查询条件。文章包含完整C++实现代码,展示了分块排序、区间更新和查询统计的具体实现细节。
2025-10-02 15:19:08
147
原创 P1447题解
这道题目通过容斥原理计算网格点对间的特殊性质。关键发现是两点连线上的整数点数量等于它们的gcd值。作者采用埃氏筛思想,先计算gcd为i的点对数量dp[i]=(n/i)(m/i),再减去所有i的倍数以避免重复计数。最终答案为Σ(i2-1)*dp[i]。该解法利用逆向处理和后缀优化,将复杂度控制在可接受范围内。代码实现了这一思路,适用于较大规模的输入数据。
2025-10-01 20:21:14
151
原创 ABC425A-E题解
比赛题解摘要 本次比赛包含5道题目,难度建议为红红橙黄黄(简单到中等)。A题通过交替加减立方数求和;B题检查1~n的排列可行性;C题是RMQ问题,通过维护前缀和解决;D题是BFS模拟染色问题,需注意同时更新的处理;E题是组合数学题,用杨辉三角预处理组合数。各题解法包括:交替变量、重复元素检查、前缀和维护、双队列BFS优化、组合数预处理等技巧。 (字数:150字)
2025-09-29 20:28:57
633
原创 P3044题解
文章摘要:该文介绍了一种基于Dijkstra算法的暴力解法,用于解决最多5个城镇的最短路径问题。通过枚举所有城镇排列组合,计算每个非城镇点到各城镇的最短距离之和,取最小值作为最终结果。文中提供了完整的C++代码实现,包括预处理、Dijkstra算法和排列枚举等关键步骤。该解法时间复杂度为O(120n),虽然常数较大但仍可接受。代码使用邻接表存储图结构,并利用优先队列优化Dijkstra算法。
2025-09-27 18:45:46
215
原创 P3051题解
摘要:本文讨论了一个环形土堆调整问题,通过数学建模将问题转化为绝对值不等式求解。核心思路是利用前缀和计算土堆差值,排序后取中位数来最小化移动量。算法时间复杂度为O(nlogn),主要来自排序操作。代码实现简洁,仅需计算前缀和、排序求中位数并累加绝对差即可得到最优解。
2025-09-27 18:45:37
241
原创 P1407题解
摘要:该文探讨了一个基于图论的关系稳定性判定问题。通过将男女关系建模为有向图(夫妻关系女→男,情侣关系男→女),使用Tarjan算法求强连通分量。若夫妻节点处于同一强连通分量则判定为"Unsafe"关系,否则为"Safe"。文中给出了具体的C++实现代码,包括图的构建、Tarjan算法应用和结果判断逻辑。该解法将复杂的社交关系转化为图论问题,通过分析环状结构来评估关系稳定性。
2025-09-25 18:46:54
205
原创 P1053题解
摘要:这道思维题要求通过特定操作将初始排列转换为满足相邻条件的目标排列。关键在于:1)若存在无法满足的相邻关系则输出-1;2)否则通过线性推导构建目标排列;3)计算最少操作次数时,将排列视为环结构,寻找能使最多元素保持不动的旋转位移,最终结果为n减去最大不动元素数。时间复杂度为O(n)。
2025-09-24 19:00:00
263
原创 P1073题解
摘要:本文提出了一种分层图结合SPFA算法解决股票买卖问题的优化方法。通过构建三层图(未买入、已买入未卖出、已卖出)来表示不同交易状态,层间通过带权边连接表示买卖操作。该方法避免了tarjan缩点的复杂度,使用SPFA求最长路径来获取最大收益。代码实现了三层图的构建和状态转移,最终输出第三层终点节点的值即为最优解。
2025-09-24 17:46:02
184
原创 CF842D题解
摘要:本文介绍了一种基于01trie树解决序列异或问题的方法。题目要求对序列进行异或操作后查询最小未出现的非负整数。核心思路是利用trie树结构,通过判断子树是否完整来确定缺失数字。对于修改操作,采用按位异或时交换左右子树的方法来提高效率。代码实现中使用了二进制位处理和动态维护trie树,最终达到高效查询的目的。
2025-09-23 15:15:10
282
原创 CF655E 题解
本文介绍了一种使用01Trie树解决异或相关问题的算法。通过预处理前缀异或和,将数值存入Trie树中,利用位运算特性与给定阈值k进行比较。当k的某位为1时,必须选择相反位路径;否则累加可选分支的计数值。算法优化了常规前缀和方法的复杂度,并采用从1开始编号的技巧简化边界处理。文末给出了核心代码实现,包括插入和查询函数,以及主函数处理输入输出的过程。该解法适用于处理大规模数据下的异或区间统计问题。
2025-09-21 18:46:43
146
原创 P1039题解
这道题目要求通过嫌疑人陈述找出凶手。数据范围较小(20人,7天),采用暴力枚举法。首先过滤无效信息,保留9种关键陈述。然后枚举每个可能的凶手和星期几,判断是否恰好有m人说谎,并确保每个人要么全说真话要么全说谎。最终输出唯一可能的凶手,否则输出无法确定或不可能。代码实现时需注意输入处理和边界条件,如getline可能出错建议使用cin。
2025-09-21 09:00:00
242
原创 费马小定理的证明
摘要:费马小定理指出当a与质数p互质时,a^(p-1) ≡ 1 (mod p)。通过构造1到p-1的序列并将每个元素乘以a,证明乘积等于(p-1)!,从而得出定理成立。该定理可用于求乘法逆元,即a的逆元为a^(p-2) mod p。证明过程利用了模运算的性质和唯一性原理。
2025-09-19 19:03:30
151
原创 P1198题解
摘要:本文提出了一种基于ST表的高效算法,用于解决动态RMQ问题。针对20万规模的数据,采用反向ST表设计,支持O(logn)时间复杂度的插入操作和查询操作。通过预处理对数数组,将区间拆分为已维护的子区间,实现快速更新。查询时利用两个2的幂次区间覆盖目标区间,保证查询效率。算法巧妙避免了线段树的复杂实现,适用于需要频繁插入和查询的场景。代码实现简洁高效,通过动态维护ST表来响应插入操作,并支持区间最大值查询。
2025-09-17 20:17:46
193
原创 P1107题解
摘要:本文介绍了一道动态规划优化题目。原问题需要O(n³)复杂度,通过预处理pre数组优化至O(n²)。状态dp[i][j]表示第i棵树高度j时的最大柿子数,转移方程利用pre数组存储各高度最优解。关键优化在于将三重循环简化为双重循环,通过预处理避免重复计算,最终在合理时间内求解。
2025-09-16 21:07:07
299
原创 P1069题解
摘要:该题要求将几何增长的细菌均分给n^m个试管,求最短时间。解题关键在于分解质因数,检查细菌底数是否包含试管底数的所有质因数。若包含,则通过统计质数出现次数,进行除法比较取最大值;否则无解。代码实现中,先处理输入数据,然后对每个细菌进行质因数分解和比较,最终输出最小时间或-1表示无解。核心思路是质因数分解和最大值的比较计算。
2025-09-15 21:22:21
219
原创 P1043题解
摘要:本文探讨了环形区间分段最值问题的动态规划解法。针对暴搜效率低的问题,采用区间DP策略,通过断环成链处理环形结构。定义状态dp[i][j][l]表示区间i到j分成l段的最值,使用前缀和优化计算。状态转移方程考虑了分段交界点k,通过枚举左右端点实现高效更新。最终代码实现了O(n^3)时间复杂度的解法,能够处理200以内的数据规模,正确计算环形区间分段后的最大和最小值。
2025-09-13 22:05:34
267
原创 ABC420A-E题解
本次比赛包含5道题目,难度从简单到中等。A题计算月份变化,通过模运算即可解决。B题处理字符串加分规则,需统计少数群体进行加分。C题维护两个数组最小值之和,通过局部更新优化性能。D题是带开关的BFS题,需记录开关状态。E题使用并查集维护连通性和黑色节点数量。整体难度建议:红红橙黄黄(对应CF难度1200-1600)。
2025-08-26 19:00:00
448
原创 线段树详解【数据结构】
线段树是一种高效的区间操作数据结构,支持区间查询和修改操作,时间复杂度为O(logn)。其核心思想是将区间分解为二叉树结构,每个节点代表一个区间。通过懒标记技术实现高效的区间修改。虽然代码量较大,但通过合理优化(如动态开点)可以节省空间。线段树适用于各类区间问题,是算法竞赛中的重要工具。本文详细介绍了线段树的原理、实现方法(包括建树、懒标记下传、区间修改和查询等操作),并提供了完整代码示例和优化建议,帮助读者掌握这一数据结构。
2025-08-22 19:00:00
1005
原创 线段树模版
本文展示了一个线段树模板代码,用于实现区间增加和区间查询功能。代码包含:1)线段树结构体定义;2)建树函数build;3)下传标记函数pushdown;4)区间更新函数update;5)区间查询函数find。主函数处理输入输出,支持两种操作:1)区间[x,y]加k;2)查询区间[x,y]的和。该模板使用惰性标记(lazy)优化,时间复杂度为O(logN)。适用于处理大规模数据的区间修改和查询问题。
2025-08-22 19:00:00
210
原创 单调栈【数据结构】
摘要:单调栈是一种用于快速查找数组中元素左右侧第一个较大/较小值的特殊数据结构。其核心思想是维护一个单调递增或递减的栈,通过比较新元素与栈顶元素来决定弹出或保留元素。文章以数组{3,5,4,2,3}为例,演示了如何用单调栈找出每个元素右侧第一个较大值的下标,并提供了相应的代码实现。这种数据结构虽然实现简单,但常应用于较复杂的算法问题中,使用时需注意栈空判断以避免错误。
2025-08-19 19:00:00
531
原创 ABC419 A-D 题解
文章摘要:本文分享了四道编程题的解法。A题通过if-else判断字符串匹配颜色;B题使用优先队列维护最小值;C题通过计算坐标最大距离求最短会合时间;D题利用差分数组高效处理字符串交换操作。题目难度依次为红橙橙橙。每道题都提供了完整代码实现,涵盖了基础字符串处理、数据结构和算法优化等知识点。
2025-08-18 19:00:00
449
原创 最小生成树 Kruskal+Prim算法【图论】
本文介绍了求解最小生成树的两种经典贪心算法:Prim和Kruskal。Prim算法从任意节点开始,每次选择与当前连通块相连的最小边扩展,使用优先队列优化后时间复杂度为O(ElogV)。Kruskal算法则直接对边排序,依次选择不构成环的最小边,利用并查集维护连通性,时间复杂度为O(ElogE)。文章通过具体图例演示了两种算法的执行过程,提供了C++实现代码,并比较了二者的特点:Prim适用于稠密图但实现较复杂,Kruskal实现简单但需预先排序所有边。两种算法虽然思路不同,但都基于贪心策略正确求解最小生成树
2025-08-15 19:00:00
713
原创 ABC418 A-E 题解
我们维护一个浮点数的map,存储每个斜率分别有多少条边对应,每次答案加上边数-1.此外我们需要格外注意,因为我们求斜边时可能会出现/0的现象,这会引发RE。然而,这个方法会超时,我们考虑优化。这道题定义了异或的反向操作,即如果参与运算的两数相等,返回1,否则返回0.输入给出一个字符串,求字符串的连续子串中可以通过合并相邻两数并返回运算结果而最终得出1的数量。A = {1,4,4,8},我们二分4得到坐标为3,这里的前缀和=9,同时用(4-3)*4=4,4+9+1=14,我们发现这与人工计算的答案一致。
2025-08-14 19:00:00
918
1
原创 普通+可撤销+扩展域并查集详解【数据结构】
本文介绍了并查集数据结构及其变体的核心原理与应用。基础并查集通过家族合并的类比实现节点合并与查询操作,采用启发式合并优化性能。进一步引入路径压缩技术提升查询效率,但该技术不适用于可撤销并查集。文章还讲解了扩展域并查集处理敌对关系等复杂场景,并通过食物链问题示例说明其应用。最后提供了基础并查集、可撤销并查集和扩展域并查集的代码实现,指出非互反关系需使用强连通分量算法处理。全文以生动的家族关系类比解析各类并查集的特性与适用场景。
2025-08-12 14:55:41
877
原创 普通+可撤销+扩展域并查集模版【数据结构】
本文展示了三种并查集实现方式:1) 普通并查集,支持快速查询和按秩合并;2) 可撤销并查集,增加了操作回退功能;3) 扩展域并查集,通过额外空间处理复杂关系。核心思想都是通过路径压缩和按秩合并来优化查询效率。普通版实现基础操作,可撤销版通过栈记录操作历史,扩展域版则利用额外数组维护对立关系。这些变体分别适用于不同场景,如普通版适合简单连通性查询,可撤销版适合需要回退的场景,扩展域版能处理敌对关系等复杂约束。
2025-08-12 13:05:23
153
原创 树状数组(补充版)【数据结构】
本文介绍了树状数组实现区间操作的两种方法。区间加单点查通过维护差分数组实现,在[l,r]区间加k时只需修改d[l]和d[r+1]。区间加区间查则通过维护两个树状数组c1和c2来优化计算,其中c1存储差分数组d[i],c2存储d[i]*i。相比线段树60行的代码量,这两种方法分别只需30行和40行左右,在简单区间操作场景下更简洁高效。但当需要处理更复杂操作时,仍建议使用线段树或分块等数据结构。
2025-08-10 15:23:43
379
原创 树状数组 【数据结构】
本文介绍了树状数组(Fenwick Tree)的基本原理和应用。树状数组是一种高效处理单点修改和区间查询的数据结构,相比线段树具有代码简单、空间复杂度低的优势。核心原理是利用lowbit运算构建树状结构,通过x±lowbit(x)操作实现快速查询和修改。典型应用包括区间求和和求解逆序对问题,其中逆序对问题可通过离散化处理大数情况。文章提供了单点修改区间查询和求解逆序对的具体代码实现,并指出树状数组在复杂操作时可能不如线段树适用。
2025-08-08 14:51:17
981
原创 SPFA 算法详解 [单源最短路]
什么是SPFA? SPFA其实就是bellman-ford算法(前面有提到过)的玄学优化. 究竟有多玄学呢? 这种算法不仅继承了原始算法可以判负环以及能跑负权图的特点, 还缩减了时间复杂度, 但如此强大的优化却并不受认可, 主要是因为有图可以克制SPFA,将其卡回原始算法的复杂度, 而负责人的出题人通常都会卡SPFA, 所以这个算法几乎已经死了, 所以它的应用范围多为随机图以及判定负环. 同时, 这种算法写起来比较轻松, 所以如果图中包含负权, 还是建议写一下.
2025-03-23 15:02:28
1253
差分约束模板(P5960)代码
2025-11-03
【数学计算工具 1.0】基于JavaScript的高精度计算器实现:支持表达式解析、函数绘图与数论几何概率综合运算系统设计
2025-10-19
前端开发基于HTML5与CSS3的响应式网页模板设计:静态网站结构布局与交互功能实现方案
2025-10-19
关于GESP八级免初赛
2025-10-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅