- 博客(49)
- 收藏
- 关注
原创 洛谷 P3831 [SHOI2012] 回家的路(拆点+最短路)
本文介绍了使用拆点算法解决地铁换乘问题的思路。通过将每个换乘车站拆分成横纵两个节点,并在其间建立权值为1的边来模拟换乘耗时。算法只连接起点、终点和换乘站,将同方向站点间的普通站视为长边处理,利用Dijkstra算法求最短路径。文中给出了详细代码实现,包含坐标处理、拆点建图和最短路径计算等关键步骤,最终有效解决了地铁换乘时间计算问题。
2026-02-26 21:28:46
853
原创 洛谷 - 差分详解 1 (超详细版)
本文介绍了洛谷P9094[PA2020]Mieszaniekolorów题目的解题思路。题目要求统计在m次颜料混合操作后,n罐白色油漆中最终变为绿色的数量。初始思路是直接模拟每次操作,但会超时(TLE)。优化方案是使用差分数组来记录三种颜料(黄、蓝、红)的添加情况,最后遍历检查每罐油漆是否同时含有黄蓝且不含红色,即为绿色。该方法将时间复杂度从O(nm)降为O(n+m),成功通过所有测试点。
2025-10-22 10:46:12
1049
原创 洛谷 - P13982 数列分块入门 7(线段树解法 - 超详细版)
本文介绍了洛谷P13982数列分块入门7的线段树解法,该题涉及区间加法、区间乘法和单点查询操作。文章详细讲解了建树、更新、懒标记下传等核心函数实现,并提供了完整的C++代码。重点强调了数组大小和取模操作的注意事项,特别是要保证结果非负。通过分块思想将复杂度优化为O(nlogn),适用于大规模数据操作。最后提醒读者注意数组开足够大和正确取模,避免WA错误。
2025-10-21 21:11:31
879
原创 洛谷 A+B 题解
本文展示了多种编程语言实现A+B问题的解法,包括:C++基础版、C语言版、Python版、Lua版;以及C++的复杂实现方式:循环遍历法、利用gcd函数计算法;还有两种数据结构解法:线段树和树状数组实现;最后提供了Pascal语言的解法。这些解法从简单到复杂,展示了不同编程思维和数据结构在解决基础问题上的应用。
2025-10-21 10:48:13
351
原创 洛谷 - P13979 数列分块入门 4(线段树解法 - 超详细版)
本文介绍了使用线段树解决洛谷P13979数列分块入门4问题的方法。题目要求实现区间加法和区间求和操作,其中求和结果需要对(c+1)取模并保证非负。文章详细讲解了线段树的构建、更新、修改和查询函数实现,并强调了代码中的几个关键点:1)数组要开足够大(1e7+10);2)取模操作要正确处理负数;3)避免频繁取模以防TLE。通过示例代码展示了完整的解决方案,帮助读者理解线段树在处理区间操作问题中的应用。
2025-10-21 10:31:27
1091
原创 洛谷 - 线段树详解 2(超详细版)
本文讲解了线段树区间乘法和加法操作的实现方法。题目要求在数列上支持三种操作:区间乘、区间加和区间求和取模。作者通过对比线段树1的代码,重点讲解了新增的乘法操作处理。关键点包括:1) 使用两个懒标记分别处理乘法和加法;2) 下传懒标记时需要注意乘法标记会影响加法标记;3) 所有运算都要及时取模。文中详细说明了建树、更新、下传标记、区间操作和查询等核心函数的实现逻辑,并提供了完整的代码实现。这篇文章适合有一定线段树基础的读者学习如何处理复合区间操作。
2025-10-20 18:55:23
1097
原创 洛谷 - 线段树详解 1 (超详细版)
本文介绍了线段树的基本概念及其在区间修改与查询中的应用。文章以洛谷P3372模板题为例,详细讲解了线段树的实现过程,包括建树、更新、区间修改和查询等核心操作。通过懒标记技术优化区间修改效率,并提供了完整的C++代码实现。该题要求实现区间加法和区间求和两种操作,展示了线段树处理这类问题的实用性。适合算法初学者学习线段树的基本原理和实现方法。
2025-10-17 23:32:45
1283
原创 洛谷 P1438 无聊的数列 题解
本文介绍了洛谷P1438无聊的数列问题的三种解法。首先是暴力解法(91分),但效率不足;其次尝试树状数组单点修改(27分),效果更差。正解采用树状数组+二阶差分,通过数学推导得到高效解法(100分)。最后提及线段树解法(100分,81ms),代码更简洁快速。文章详细展示了从暴力到优化的完整思考过程,并感谢了相关题解的启发。
2025-10-16 23:00:31
475
原创 洛谷 / 一本通 - dp 题目详解 7(超详细版)
本文讲解了石子合并和乘积最大两个动态规划问题。石子合并提供了三种解法:两种三层循环递推和一种记忆化搜索方法,均采用区间DP思路。乘积最大问题给出60分代码和满分高精度解法,包含字符串处理、高精度加减乘和比较函数实现。两道题目都是经典DP问题,适合练习区间DP和高精度处理技巧,代码实现展示了不同解法的核心思路和优化方法。
2025-10-10 23:05:17
723
原创 洛谷 csp 真题 1 (超详细版)
本文介绍了三道CSP竞赛真题的解题思路和代码实现。第一题是统计8位01字符串中1的个数,通过字符遍历累加即可解决。第二题是怪兽决斗问题,通过排序后贪心策略计算最小存活数。第三题是地图探险问题,使用方向数组处理移动逻辑,统计访问过的格子数。每道题都提供了完整的解题分析和C++代码实现,适合竞赛选手参考学习。
2025-10-10 09:07:26
881
原创 洛谷 - dp / 递推 题目详解 5(超详细版)
本文介绍了两个动态规划问题:硬币问题和数字金字塔问题。硬币问题要求用最少1、5、11元硬币凑出n元,通过递推公式dp[i]=min(dp[i-1],dp[i-5],dp[i-11])+1解决。数字金字塔问题要求从顶部到底部的最大路径和,采用逆向思维从底层向上递推,每个位置取下方两个值的较大者累加。文中给出了两个问题的C++实现代码,并预告了下期将讲解的传球问题。这两个问题展示了动态规划在不同场景下的应用技巧。
2025-10-05 22:00:57
1132
原创 洛谷 - dp 题目详解 4(超详细版)
本文介绍了三种关于纸币问题的动态规划解法。第一题要求用最少数量的纸币凑出指定金额,使用最小化DP解决;第二题计算考虑顺序的支付方式数,使用累加式DP;第三题求不考虑顺序的纸币组合数,采用背包式DP。三题都给出了对应的C++代码实现,均使用动态规划思想,通过不同状态转移方式解决不同类型的纸币组合问题,最后结果都需要取模处理。
2025-10-05 10:15:55
837
原创 洛谷 - dp 题目详解 3(超详细版)
摘要:本文讲解了两道动态规划题目。第一题P2800是爬塔问题,小A可以花费时间爬楼或使用仙术跳跃,但跳跃后必须休息至少一层。解法采用动态规划,状态转移方程为dp[i]=min({dp[i],dp[i-1],dp[i-2],dp[i-3]})+a[i]。第二题P10250是关于下楼梯的方案数计算,每次可以走1-3个台阶,递推公式为dp[i]=dp[i-1]+dp[i-2]+dp[i-3]。两题都给出了详细的代码实现。
2025-10-05 09:50:25
876
原创 洛谷 - dp 题目详解 2(超详细版)
本文介绍了两个动态规划问题:P1002"过河卒"和P1616"疯狂的采药"。第一个问题使用标数法计算卒在棋盘上避开马控制点的路径条数,通过二维DP数组求解。第二个问题则是一维完全背包问题,通过优化空间的一维DP数组计算在规定时间内可采草药的最大价值。两题均采用动态规划思想,分别涉及棋盘路径计数和背包问题两种典型应用场景。文章提供了完整的思路分析和C++代码实现。
2025-10-05 08:29:31
903
原创 一本通 - dp 题目详解(超详细版)
这篇教程讲解了两道动态规划题目的解法。第一题是最长公共子序列(LCS),通过构建二维DP数组,比较字符串字符并转移状态求解。第二题是滑雪问题,采用记忆化搜索方法,通过DFS遍历四个方向并记录最大路径长度。两题都给出了完整代码实现,第一题使用字符串处理技巧,第二题使用方向数组简化搜索。
2025-10-04 23:13:34
880
原创 洛谷 - dp 题目详解(超详细版)
本文介绍了两个动态规划(DP)问题:P1832素数分解和P1910间谍选择。对于P1832,通过欧拉筛预处理素数后,使用DP计算将正整数分解为素数和的方案数。P1910则是一个二维背包问题,需在预算和伪装能力的双重限制下最大化获取的资料量。两题均采用经典DP思路,分别给出了对应的代码实现。文章适合DP初学者学习基础应用。
2025-10-04 10:48:48
920
原创 洛谷 - 背包题目详解(超详细版)
本文介绍了四道背包问题的解题方法。首先分析P1060开心的金明,使用01背包模板,将价格与重要度乘积作为价值。接着讲解P1164小A点菜的计数背包解法,强调输入顺序的重要性。然后说明P1048采药是标准01背包问题。最后P1049装箱问题考察背包基础,计算剩余最小空间。代码示例展示了各题解法,提醒读者注意题目细节。通过这四道题巩固了背包问题的应用能力。
2025-10-03 22:09:56
1349
原创 洛谷P13825 【模板】线段树 1.5
本文介绍了解决洛谷P13825线段树问题的两种方法。首先尝试使用普通树状数组实现,将数组扩大后仍遇到RE错误。随后改用动态开点线段树方案,通过维护懒标记和区间更新查询操作,最终成功解决问题。代码展示了动态开点线段树的核心实现,包括pushup、pushdown、区间修改和查询等关键函数,相比树状数组方法更高效地处理了大范围数据。
2025-10-01 15:19:42
574
原创 动态规划 - 背包详解(下)
本文介绍了解决庆功会奖品购买问题的两种多重背包方法。第一种将多重背包转换为01背包,通过拆分物品数量实现;第二种直接实现多重背包,通过三重循环处理物品数量限制。文中提供了两种方法的代码实现,并提醒注意价格与价值的区别,避免因数组大小设置错误导致部分得分。最终目标是使用给定预算购买价值最大的奖品组合。
2025-10-01 13:07:09
535
原创 动态规划 - 背包详解(中)
本文介绍了两种背包问题的动态规划解法:完全背包和分组背包。完全背包问题中物品数量无限,通过修改状态转移方程(dp[i][j]=max(dp[i-1][j],dp[i][j-w[i]]+v[i]))实现优化。分组背包问题中物品被分为若干组,每组只能选一件,解法采用三层循环处理组、容量和组内物品。文章提供了两种背包问题的完整代码实现,并比较了与01背包问题的区别。文末作者幽默地请求读者点赞关注,并预告下次内容。
2025-10-01 08:13:38
548
原创 动态规划 - 背包详解(上)
本文介绍了动态规划中的两个经典问题:最长不下降序列和01背包问题。对于最长不下降序列问题,通过构建状态转移数组和回溯索引来求解,给出了两种实现方式。对于01背包问题,分析了贪心算法的局限性,并提供了二维和一维两种动态规划解法。最后以一道01背包模板题为例展示了具体代码实现。文章强调动态规划在解决最优化问题上的优势,并预告后续将深入讲解背包问题的其他变种。
2025-09-30 23:31:37
1001
原创 洛谷P11868 [威海市赛2024] 抽卡
这篇题解介绍了洛谷P11868抽卡问题的解法。题目描述两人参与抽卡游戏,需要计算猜对次数的期望值。通过分析发现,答案其实就是A卡和B卡数量中的最大值。因此代码实现非常简单,只需输出max(a,b)即可。示例代码展示了如何用C++实现这个解法,并按要求控制输出精度。两个样例输入都验证了这个结论的正确性。
2025-09-30 07:58:18
422
原创 洛谷P2121 拆地毯 & 洛谷P1886 滑动窗口 /【模板】单调队列(超详细版)
本文讲解了洛谷P2121拆地毯和P1886滑动窗口两题。P2121要求从m条地毯中选择最多K条无环连接的美丽度之和最大,使用Kruskal算法的最大生成树解法。P1886要求找出滑动窗口中的最小值和最大值,使用双端队列的单调队列模板实现。两题分别给出了完整代码实现,并附有简要思路说明。
2025-09-29 19:23:09
847
原创 洛谷P1339 [USACO09OCT] Heat Wave G(超详细版)
本文介绍了Dijkstra算法及其在解决洛谷P1339[USACO09OCT]HeatWaveG问题中的应用。文章首先回顾了Dijkstra算法的基本原理,包括普通版和堆优化版的实现代码,并指出该算法适用于无负权边的图。针对题目要求,作者给出了具体解题思路:通过读取输入数据,构建邻接表,使用Dijkstra算法计算从起点s到终点t的最短路径,最后输出结果。文末附上了完整的C++实现代码,并提供了测试样例验证。该解法未使用堆优化,适合初学者理解Dijkstra算法的核心思想。
2025-09-29 09:01:23
525
原创 洛谷P10378 [GESP202403 七级] 交流问题 & P1330 封锁阳光大学(超详细版)
本文介绍了洛谷两道关于二分图的题目:P10378交流问题和P1330封锁阳光大学。第一题通过染色法计算两校学生人数范围,第二题在判断二分图的基础上求最少河蟹数。两题都使用邻接表存储图结构,通过DFS染色解决。文章提供了完整代码实现,并建议读者尝试类似题目如P1525关押罪犯和P1894完美的牛栏。解题核心在于理解二分图性质并应用染色法判断和计算。
2025-09-29 08:05:30
1144
原创 洛谷B3644 【模板】拓扑排序 / 家谱树 & 洛谷P4017 最大食物链计数(超详细版)
本文介绍了拓扑排序的概念及其在洛谷两道题目中的应用。首先通过食物链类比解释拓扑排序,即对有向无环图顶点进行线性排序。然后详细解析B3644家谱树题目,给出邻接矩阵和邻接表两种解法。接着讲解P4017最大食物链计数题目,提供基于邻接表的拓扑排序解法,并处理模数运算。最后推荐了相关练习题目。文章以通俗易懂的方式讲解算法实现,适合初学者理解拓扑排序的应用场景和解题思路。
2025-09-28 23:12:06
1011
原创 洛谷【模板】单源最短路径(超详细版)
本文介绍了单源最短路径问题的两种解法:普通Dijkstra算法和堆优化Dijkstra算法。作者首先通过P3371模板题展示了普通Dijkstra的实现方法,指出其时间复杂度为O(n²)会导致在较难题目中TLE。接着以P4779为例,引入优先队列进行堆优化,将时间复杂度降至O(mlogn)。文章包含详细代码实现,并对比了最小生成树Prim算法与最短路算法的异同。最后推荐了相关练习题,帮助读者巩固所学知识。
2025-09-28 21:47:21
1320
原创 洛谷P3366 【模板】最小生成树(堆优化版)
本文介绍了使用堆优化的Prim算法解决最小生成树问题。通过邻接表存储图,优先队列实现堆优化,用d数组记录最短距离,vis数组标记访问节点。代码展示了具体实现过程:初始化距离数组,从起点出发更新邻接节点距离并压入堆,循环处理堆顶元素直至访问所有节点,最后检查连通性并输出总权值。该方法有效提高了Prim算法的效率。
2025-09-27 23:48:25
294
原创 洛谷P3371 【模板】单源最短路径(弱化版)
本文介绍了使用未优化的Dijkstra算法解决洛谷P3371单源最短路径问题。文章首先简要介绍了Dijkstra算法的发明者E.W.Dijkstra及其贡献,然后给出了题目描述和输入输出样例。重点讲解了算法实现,包括初始化距离数组、松弛操作等核心步骤,并提供了完整的C++代码实现。最后展示了如何输出从起点到各点的最短路径长度。该解法适用于无负权边的有向图最短路径问题。
2025-09-27 07:59:28
510
原创 洛谷P3366 【模板】最小生成树(超详细版)
本文介绍了洛谷P3366最小生成树模板题的两种解法:Kruskal算法和Prim算法。Kruskal算法通过边排序和并查集实现,时间复杂度为O(MlogM)。Prim算法采用类似Dijkstra的贪心策略,作者详细记录了从邻接矩阵到动态数组的优化过程,最终使用邻接表实现并解决MLE问题。文章提供了完整的代码实现,并建议读者尝试相关练习题(P1111、P2330)。两种算法都能正确求解最小生成树问题,Prim算法在稠密图中效率更高。
2025-09-26 22:33:39
1806
原创 洛谷P2330 [SCOI2005] 繁忙的都市
本文介绍了洛谷P2330繁忙的都市这道最小生成树问题的解法。该题与P1111修复公路类似,只需将Kruskal算法中累加操作改为求最大值即可。文章提供了完整的C++代码实现,包括并查集和排序的细节处理,最后输出选中的边数和最大权值。
2025-09-26 15:25:20
448
原创 洛谷P1111 修复公路
这篇题解介绍了洛谷P1111"修复公路"的解法。该题要求计算使所有村庄连通的最早时间,可以转化为最小生成树问题。文章提供了两种算法:Kruskal和Prim,核心思路是将传统最小生成树的权值累加改为求最大值。Kruskal算法通过并查集实现,按时间排序边;Prim算法通过维护距离数组实现。两种方法最终输出的都是连接所有村庄所需的最长修复时间,若无法连通则输出-1。代码实现清晰,适合初学者参考。
2025-09-26 15:02:37
633
原创 洛谷P3366 【模板】最小生成树(Prim)
本文介绍了使用Prim算法解决洛谷P3366最小生成树问题的过程。与Kruskal算法相比,Prim算法更适合处理稠密图。作者详细讲解了Prim算法的实现思路,并通过多次代码优化(包括数组大小调整、动态数组使用等)逐步解决RE、MLE等问题,最终给出了能通过所有测试用例的100分代码。文章还比较了Prim和Kruskal算法的适用场景,为读者提供了实用的解题思路和优化技巧。
2025-09-26 10:48:04
740
原创 洛谷P1886 滑动窗口 /【模板】单调队列
本文介绍了使用单调队列解决洛谷P1886滑动窗口问题的模板代码。通过维护一个单调递减队列获取窗口最大值,一个单调递增队列获取窗口最小值。算法核心是遍历数组时动态维护这两个队列:移除不满足单调性的元素,确保队首元素在窗口范围内,当窗口达到指定大小时记录极值。代码清晰展示了如何用双端队列实现O(n)时间复杂度的滑动窗口极值查询,最后分别输出每个窗口的最小值和最大值序列。
2025-09-25 18:16:21
451
原创 洛谷P1669 [USACO04DEC] Bad Cowtractors S
本文介绍了洛谷P1669题的最大生成树解法。与最小生成树类似,但排序改为从大到小。使用Kruskal算法处理稀疏图,通过并查集实现连通性判断。代码实现包含输入处理、排序、贪心选择边等步骤,最后判断是否连通并输出结果。作者建议参考其最小生成树题解(P3366),并提供了完整代码示例。
2025-09-25 11:16:20
162
原创 洛谷P1012 [NOIP 1998 提高组] 拼数
该文章介绍了解决洛谷P1012拼数问题的思路与代码实现。题目要求将n个正整数连接成最大整数,建议使用字符串处理和自定义排序。关键步骤包括:1)输入字符串数组;2)使用sort函数配合自定义比较函数cmp,按a+b>b+a的规则排序;3)输出结果。提供了完整的C++代码示例,使用<bits/stdc++.h>头文件和自定义比较函数实现高效排序。方法简洁有效,适合竞赛编程场景。
2025-09-25 10:20:34
344
原创 csp 初赛小技巧
本文总结了计算机考试答题技巧:选择题要牢记基础概念,掌握简单数学和程序片段分析;程序阅读题建议画流程图和多造样例;完善程序题需先独立思考再用排除法。这些方法能帮助考生有效应对考试题型。
2025-09-24 23:35:30
252
原创 洛谷B3874 [GESP202309 六级] 小杨的握手问题
本文介绍了使用树状数组解决洛谷B3874握手问题的方法。首先讲解树状数组的基本实现,包括lowbit计算、更新和查询操作。然后将问题转化为求逆序对问题,给出具体解题思路:将学号自增后,通过树状数组统计每个数之前比它小的数的个数,累加得到总握手次数。最后附上完整代码实现,包括树状数组函数和主逻辑处理部分。文章通过具体实例演示了如何应用树状数组解决实际问题。
2025-09-24 12:42:36
475
原创 洛谷P1205 [USACO1.2] 方块转换 Transformations
本文介绍了解决洛谷P1205方块转换问题的方法。该题通过模拟六种不同的方块变换操作(包括旋转、镜像及组合操作),判断初始图案经过何种变换后能得到目标图案。作者提供了详细的实现思路:前四种基础操作分别处理,操作五由前四种组合而成,操作六直接比较,最后都不匹配则输出操作七。文章包含完整的C++代码实现,通过函数封装各操作逻辑,依次检测变换类型并输出结果。该方法清晰展示了如何通过模拟和逐步判断解决图形变换问题。
2025-09-24 10:30:44
177
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅