- 博客(50)
- 收藏
- 关注
原创 常用算法思想及模板
本文整理了算法竞赛中C++常用的几个模板和解题思路:1)使用cout的fixed和setprecision控制小数位数;2)贪心算法解决排队接水问题;3)双向最长子序列解决合唱队形问题;4)归并排序求逆序对;5)高精度快速幂计算麦森数;6)倍增法求LCA最近公共祖先。通过具体例题展示了这些算法的实现方法,为算法竞赛选手提供了实用的代码模板和解题思路。
2025-07-29 10:26:55
83
原创 Codeforces Round 1039(Div.2)
文章摘要:分享了A、B、C三题的解题思路:A题采用贪心算法处理排序后的小于等于k的元素;B题用双指针模拟LR操作避免连续四个单调元素;C题通过分析元素递增关系判断是否能通过特定操作得到目标数组。作者认识到自身不足,决心加强练习。
2025-07-28 11:16:14
883
原创 图论:Dijkstra算法
本文介绍了Dijkstra算法及其两种实现方式,用于求解有向有权图中单源最短路径问题。朴素版采用邻接矩阵存储,时间复杂度O(n²),适合稠密图;堆优化版使用邻接表和小顶堆,复杂度O(mlogn),适合稀疏图。文章通过例题展示了算法应用,强调避免负权边和重复访问节点的注意事项,并提供了完整代码模板。Dijkstra算法通过贪心策略逐步确定各节点到起点的最短距离,是图论中的经典算法。
2025-07-26 18:00:46
763
原创 图论:最小生成树
本文介绍了两种最小生成树算法:Prim算法和Kruskal算法。Prim算法采用贪心策略,从节点角度构建最小生成树,通过维护节点到树的距离实现优化,适用于稠密图,时间复杂度为O(V²)或O(ElogV)。Kruskal算法通过边构建最小生成树,使用并查集判断连通性,按边权排序后逐步选择边,适用于稀疏图,时间复杂度为O(ElogE)。文章详细分析了两种算法的实现步骤、模板代码(包括邻接矩阵和邻接表版本)以及适用场景,并通过寻宝问题展示了具体应用。两种算法各有优势,应根据图的稠密程度选择合适的实现方式。
2025-07-25 19:05:16
1422
原创 图论:并查集
本文介绍了并查集(Disjoint Set Union)这一数据结构及其应用。并查集主要用于处理不相交集合的合并与查询问题,核心功能包括:1)合并两个集合;2)判断两个元素是否属于同一集合。文章详细讲解了并查集的实现方法,包括路径压缩优化、初始化操作、查找函数(find)、合并函数(join)和判断函数(is_same)。通过三道例题(寻找存在的路径、冗余的边、冗余的边II)展示了并查集的实际应用,并分析了不同情况下的处理策略。特别强调了并查集在判断连通性和检测环时的重要作用,为后续学习其他算法如Dijks
2025-07-25 13:22:40
1066
1
原创 图论:搜索问题
本文介绍了图论中常见的DFS和BFS搜索算法及其应用,重点讲解了岛屿问题的多种变体及解法。主要内容包括:1)孤岛面积计算,通过边界DFS消除非孤岛后统计剩余陆地;2)沉没孤岛问题,标记非孤岛后输出;3)水流问题,采用逆向双边界搜索;4)最大岛屿建造,通过编号和面积映射优化计算;5)岛屿周长统计,通过边界判断实现;6)字符串接龙问题,使用BFS构建转换图;7)有向图连通性检查。文章提供了详细的算法思路和C++代码实现,涵盖了图论搜索的典型应用场景。
2025-07-24 19:27:24
977
原创 河南萌新联赛2025第二场-河南农业大学
本文总结了萌新联赛第二场的解题情况。K题是签到题,直接输出指定字符串;I题采用二分法和log2函数解决猜数游戏;M题通过数学推导和勾股定理计算阴影面积。重点讲解了A题的整除分块算法,通过分组优化计算约数个数。D题则运用树结构和位运算处理网络连接方案。作者反思比赛中因知识面不足导致部分题目卡壳,强调需要继续沉淀学习。
2025-07-23 20:20:18
739
原创 Codeforces Round 181(Div 2)
昨晚被迫打了场Div2难度的CF比赛,A题找字符串中的"FFT"和"NTT"让我卡了很久,最终通过把T字符全部提前解决。B题需要找到使(a,b)变为(0,0)的最小操作次数,使用GCD化简后与k比较得出答案。C题考察数论中的容斥原理,计算质因数分解不含一位数的数字个数。虽然前两题还算顺利,但第三题的规律复杂度让我罚坐到凌晨。比赛体验证明即使是Div2的前两题也需要一定思维量。(149字)
2025-07-23 10:16:40
957
2
原创 基础算法思想(递归篇)
本文介绍了递归算法在编程竞赛中的应用,通过多个题目展示了递归思想的实现方式。主要内容包括:1)全排列问题的递归回溯解法;2)双核处理任务的递归搜索;3)组合问题的递归枚举;4)木棒拼接问题的优化思路;5)幂次方表达式的递归分解;6)分形图形的递归绘制;7)复合字符串的递归解析。文章强调递归是搜索、动态规划等算法的基础,并详细讲解了如何通过递归遍历所有可能情况,以及回溯时状态还原的重要性。每个题目都提供了完整的C++代码实现。
2025-07-22 19:02:39
842
原创 DFS 暴力也能用在算法竞赛
深度优先搜索(DFS)是一种系统性穷举所有可能性的算法技术,适用于排列组合、路径查找和树形结构问题。文章通过两个典型例题展示了DFS的应用: 单词接龙:通过递归回溯实现单词拼接,维护当前字符串状态,使用次数限制剪枝,最终求得最长接龙长度。核心在于每次DFS时更新最大值,并对符合条件的单词进行拼接尝试。 产生数:将问题转化为数字变换的连通性计算,使用DFS统计每位数字的可能变换数,通过高精度乘法累乘结果。特别处理了间接变换的情况(如2→5→1),并利用标记数组避免重复计算。 两题均体现了DFS的四步法:定义状
2025-07-21 19:36:34
655
原创 Codeforces Round 1037(Div.3)
文章摘要:本文记录了Codeforces Div.3比赛的解题思路和代码实现。A题通过字符串处理快速找到数位最大值;B题模拟数组遍历,维护计数器num;C题分析塔楼传送与水位上升的相对关系;D题通过自定义排序更新金币数量;E题通过GCD和LCM验证数组构造的合理性。每道题都提供了赛时代码和详细解题分析,展现了对基础算法和思维题的掌握。
2025-07-19 16:30:37
1156
原创 线性DP基础模板
本文总结了线性动态规划(DP)的常见模板与应用。重点介绍了最长上升子序列的O(NlogN)优化解法,通过二分查找维护dp数组。随后依次讲解了最长连续上升子序列、最长重复子数组、最长公共子序列等经典问题的解法模板。文章还涵盖了几个衍生问题,包括不相交的线、判断子序列、不同子序列计数等。最后详细解析了两个字符串的删除操作和编辑距离问题,通过状态转移方程展示了增删改操作的统一处理方式。这些模板对ICPC/CCPC等算法竞赛中的线性DP问题具有重要参考价值。
2025-07-19 10:56:21
543
原创 二叉树(建立 + 遍历 + 拓展)
本文分享了二叉树入门学习的心得,重点介绍了二叉树的构建、三种DFS遍历方式(前序、中序、后序)以及实际应用。通过4道洛谷题目(P4913、B3642、P1305、P3884)的代码解析,展示了如何求二叉树深度、实现不同遍历方式、处理字符二叉树以及计算节点间距离。特别强调了用后序遍历求最近共同祖先的技巧,并提供了通过父节点数组存储法优化查找的思路。文章以具体代码示例帮助理解二叉树的基本操作和递归思想。
2025-07-18 15:45:07
911
原创 河南萌新联赛2025第一场-河南工业大学
本文摘要:这是一组编程竞赛题解,包含多个算法问题及其解决方案。L题通过简单修改数组元素实现要求;C题通过数学公式直接计算结果;H题模拟蛇形矩阵填充;I题通过分析二进制字符串首尾字符判断结果;G题使用两种方法解决最大两段子段和问题;M题暴力枚举验证子序列条件;B题采用优先队列实现代价转移;A题运用斯特林数和阶乘计算排列组合。这些题目涵盖了基础编程、数学推导、动态规划和组合数学等知识点,展示了多种算法思维和解题技巧。
2025-07-17 19:15:36
1243
原创 string + 栈 & bitset & 可达性统计(拓扑排序)
本文总结了栈、bitset和拓扑排序的算法应用。通过"最优屏障"和"吐泡泡"两道例题展示了单调栈在处理元素匹配问题中的优势。介绍了bitset的常用操作,包括二进制转换和位运算,并通过"小红组比赛"、"简单瞎搞题"和"起床困难综合征"等题目演示了bitset在状态压缩和位运算优化中的应用。最后详细讲解了拓扑排序算法,通过"视频讲解"和"可达性统计"两道例题展示了如何利用
2025-07-17 15:21:33
1383
原创 完全背包-初识dp的美
本文总结了完全背包问题的动态规划解法。完全背包与01背包的区别在于物品可重复选取。解题关键在于确定循环顺序:若需要考虑元素排列顺序,则外层循环遍历目标值;若不需考虑顺序,则外层遍历物品。内层循环均需正序,以支持多次选取。通过状态转移方程(如dp[i]=min(dp[i],dp[i-w]+1))递推最优解。文章以单词拆分、完全平方数、零钱兑换等例题,展示了外层循环顺序对解法的影响,并强调完全背包内层必须正序遍历才能正确处理物品重复选取。
2025-07-15 16:41:09
774
原创 优先队列&赛后补题
本文比较了优先队列和集合(set)的使用场景,分析了两者的异同点。优先队列适用于需要频繁插入并自动排序但无需查找元素的场景,而set适合需要快速查找的有序集合。文章详细讲解了优先队列的实现原理(二叉堆)和两种类型(大根堆/小根堆),并通过动态中位数问题展示了对顶堆的应用。此外,还分享了Codeforces和牛客竞赛的解题思路,包括双指针技巧、滑动窗口优化等算法在具体问题中的应用,如处理循环移位数组的统计问题。最后通过预处理和逆向遍历等技巧优化了算法效率。
2025-07-14 15:13:48
674
原创 单调栈&单调队列【算法进阶】
本文总结了单调栈和单调队列的应用与实现。单调栈适用于寻找元素左右第一个大于/小于它的元素,如柱状图最大矩形问题;单调队列优化滑动窗口可用于求子数组极值问题。文章详细讲解了LeetCode 84、85、862等典型题目的解法,并提供了代码实现。通过预处理和单调性维护,这两种算法能将时间复杂度优化至O(N)。最后对比了两种滑动窗口的实现方式:双端队列适用于满足条件的子数组区间,单调队列则用于维护元素前的最值。
2025-07-12 10:42:23
737
原创 Set & 二分 -> 剑指算法竞赛
本文主要介绍了C++ STL中的集合容器set及其相关操作,以及二分查找算法的应用。set分为有序(set/multiset)和无序(unordered_set/unordered_multiset)两种,具有自动排序、去重等特点。文章详细讲解了set的定义、遍历和常见操作(插入、删除、查找等)。在二分算法部分,介绍了二分查找的前提条件、标准库函数(lower_bound/upper_bound)的使用场景,以及整数二分和浮点二分的模板实现。通过"进击的奶牛"和"切绳子&quo
2025-07-11 17:47:48
603
原创 Map容器&用map优化程序
本文总结了map的基础知识和操作,包括map的定义、增删改查、元素访问和遍历方法。通过5道编程题目练习了map的实际应用:1)同构字符串验证;2)字母解码;3)完美K倍子数组;4)和为K的子数组;5)叫号系统实现。重点讲解了map的两种遍历方式(迭代器遍历和快速遍历)以及注意事项,如自动排序特性导致的时间消耗问题、正确使用迭代器访问元素等。摘要概括了map的核心用法和典型应用场景,帮助快速回顾map的基本操作和解题思路。
2025-07-10 14:48:56
799
原创 单调栈(详解)
本文总结了单调栈的基本概念和应用。单调栈分为单调递增栈和单调递减栈,主要用于求解数组中元素右边或左边第一个大于/小于当前元素的值。文章通过多个例题展示了单调栈的具体应用,包括处理温度变化、计算雨水容量等场景,并提供了对应的代码实现。同时强调了单调栈的核心思想:在维护栈的单调性过程中,及时弹出无用元素,利用栈顶元素解决问题。最后指出需要通过大量练习来掌握这一数据结构,建议养成总结习惯以提高理解。
2025-07-08 14:42:27
691
1
原创 单调队列&双端队列
本文系统讲解了双端队列和单调队列的原理与应用。首先介绍了双端队列的基本操作(push_front/pop_front/push_back/pop_back)及其特点——支持两端操作。重点剖析了单调队列的核心思想:通过维护队列的单调性(递增/递减)来高效解决滑动窗口最值问题,时间复杂度O(N)。通过洛谷P1886滑动窗口模板题,详细演示了如何用数组模拟单调队列来求窗口最值,并给出了AC代码。此外,还介绍了单调队列在切蛋糕、逛画展、质量检测等题目中的典型应用,对比分析了存索引和存值两种实现方式的差异。最后总结了
2025-07-07 14:30:33
622
2
原创 2023年河南省CCPC-H题
后来队友说这道题可以补我就看了看,第一遍还是没看懂题目意思,问了之后才知道了这个题到底是让你求什么。乍一看这道题是很难的(
2025-05-16 11:12:24
256
原创 2023年河南CCPC->F题
2-小根堆中用于存放当前包含a[i]和a[i-1]的窗口,然后遍历每一个差值,找出包含这两个元素的窗口的max的最小值。1-小根堆中存每两个元素的差值,然后用窗口去滑每一个子区间,遍历找出最小答案。对于这道题可以用两种方法(实则是一种)这是一道有关于滑动窗口的题目。
2025-05-15 20:55:28
278
原创 新手备战蓝桥杯国赛(新手就是爱记录版)
我们这样想:既然我们二分的是答案,我们就把当前的mid当作是答案带入问题中用check函数来判断一下当前的这个答案是否是真真正正满足条件(符合题意)的答案,然后根据实际选择合适的的板子即可。因为要求的是最小值,所以用的二分答案的板子应该是int mid = (l+r)>>1;这是一道关于简单二分答案算法的题目,煮啵本来学习二分答案想在省赛中用的,但是没有考,二分答案的板子有好多个,应该找到最好用的,煮啵整理的比较好用的二分板子就是。2-求最小值(左边界端点)--> int mid = (l+r)>>1;
2025-05-14 16:27:20
398
原创 天梯赛比较好的一些题目(菜鸟只写L1版)
因为要插入的地方前面是一个字符串,后面也是一个字符串,所以我们可以直接查找这两个字符串拼接后形成的新的字符串另外补充:string中的一些函数删除:s.erase(起始下标,删除子串的长度);插入:s.insert(起始下标,插入的子串);替换:s.replace(起始的下标,更换的子串的长度,要更换的子串);
2025-04-18 16:51:01
1025
原创 C++中STL的部分容器的应用
有一个B<----(C)<----A的车站,列车从A开过来然后车站C是一个不能掉头的死胡同,意思就是到车站之后只能往B走了, A中列车的原始列车序列为:1 2 3 …对于所求问题--国籍有几种,可以用类似桶排序的思想,开一个数组,每一个角标代表一个国籍,对应的元素就是这个国籍的的人数,其次需要开一个结构体来储存每一个人的信息(主要就是到达的时间和国籍),然后再思考问题,对于每一艘船的前24小时之内,如果有船不在这时间范围内,就会剔除掉,而这艘船正好就是比较先到的船只,遵。循先进先出原则,即队列的数据结构。
2025-04-15 21:30:09
768
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人