- 博客(40)
- 收藏
- 关注
原创 Floyd算法&Bellman‑Ford &SPFA
本部分整理了 Floyd、Bellman‑Ford、SPFA 三类最短路模板,包含全源最短路、判断起点可达负环、负权单源最短路、正权单源最短路四道洛谷习题;Floyd 适合小规模全源最短路,Bellman‑Ford 与 SPFA 支持负权,SPFA 为 Bellman‑Ford 队列优化,负权图不可使用 Dijkstra,边权全正时优先选择堆优化 Dijkstra。
2026-08-28 15:05:15
210
原创 并查集&Dijkstra&离散化
本文整理了三类图论基础工具:并查集、离散化、堆优化 Dijkstra 最短路,附带对应模板与经典例题。并查集用于集合合并、连通性查询,依靠路径压缩、按大小 / 秩合并实现接近常数效率;可撤销并查集禁止路径压缩。代表题 P3367。离散化解决数值范围过大但有效点数少的问题,流程为收集、排序、去重、二分映射;仅保留相对大小、相等关系,不能用于原值差值运算。和并查集结合解决 P1955 程序自动分析。堆优化 Dijkstra求解非负权图单源最短路,复杂度\(O(m\log n)\);大数据距离需要long
2026-08-27 16:12:07
313
原创 2026河南萌新联赛(六)郑州大学
本次郑州大学萌新联赛第六场题目难度梯度分明,签到题考察简单找规律与字符串遍历;中等题涵盖多种经典模型:神秘数字为信息论构造题,利用二进制或分治实现最少集合构造;垂直电梯依靠数论分类讨论最小乘坐次数计算开销;果树问题通过拆分收益数组转化为 Kadane 最大子段和;空调题纯数学判定状态是否可达;耳鸣将二维圆形覆盖转为一维差分区间统计。整套题数据规模偏大,多要求 O (n) 或 O (1) 算法,不能暴力模拟,易错点集中在数值溢出、浮点数精度、边界条件处理。
2026-08-26 15:16:10
171
原创 求逆序对模版
本文介绍了求解逆序对的两种主流方法:归并排序法和树状数组法。逆序对定义为数组中满足i<j且a[i]>a[j]的下标对。归并排序法通过分治策略,在合并有序数组时统计逆序对数量,时间复杂度为O(nlogn)。树状数组法需要先对数据进行离散化处理,然后从后往前遍历数组,利用树状数组查询比当前元素小的数量。两种方法都能高效解决大规模数据的逆序对问题,暴力解法仅适用于小规模数据。文中提供了完整的代码实现和逻辑说明。
2026-08-14 20:13:42
213
原创 ST 表的相关知识
ST表算法摘要 ST表是一种用于解决静态区间最值查询(RMQ)的高效算法,支持O(nlogn)预处理和O(1)查询。其核心思想是预处理每个2^j长度区间的最值,查询时通过两个可能重叠的区间覆盖目标区间。适用于不可修改的数组,查询效率优于线段树。 关键点: 预处理:构建st数组,st[j][i]表示从i开始长度为2^j区间的最值 查询:将查询区间[l,r]分解为两个2^⌊log2(len)⌋长度的子区间取最值 应用:包括最大值/最小值查询模板,以及结合单调栈解决复杂问题(如eJOI 2020 Fountain
2026-08-14 17:52:53
205
原创 快速幂+高精度模版及例题
快速幂算法摘要 快速幂是一种高效计算大指数幂的算法,可将时间复杂度从O(n)降至O(logn)。核心思想是通过指数二分法或二进制拆分实现指数减半。算法分为递归和迭代两种实现方式:递归法利用分治思想将a^b分解为a^(b/2)的平方;迭代法通过二进制逐位处理,每次循环将底数平方并判断当前位是否为1来决定是否乘入结果。两种方法都能高效计算大数幂次,适用于模运算等场景。
2026-08-13 17:55:34
221
原创 2026萌新联赛(四)赛后补题
本文总结了2026萌新联赛(四)的题目难度分布及部分解题思路。比赛包含12道题,难度从签到到hard不等,涉及数学、高精度乘法、01背包等知识点。 作者仅完成2道签到题(M、G题),其中M题是纯数学计算,G题通过打表发现n≥20时结果恒为0313。重点补题了L题(高精度乘法模板)和J题(数学斜率计算): L题通过反转字符串、模拟竖式乘法实现高精度运算 J题利用gcd约分坐标,map统计同斜率点对数量 还分析了D题(01背包变种),通过枚举免费物品+标准背包求解。文章提供了完整代码实现,展示了从问题分析到算法
2026-08-11 20:28:28
228
原创 DFS和BFS相关题解
本文总结了三个算法问题的解题思路: 选数问题:使用DFS回溯法枚举组合,通过试除法判断素数。在n个数中选k个,统计和为素数的组合数。 邮票面值设计:结合DFS枚举邮票面值组合和动态规划验证。DFS生成递增面值序列,DP计算连续可凑邮资最大值,保存最优解。 字串变换:通过规则进行字符串转换,寻找从A到B的最短路径(未提供具体解法)。 三个问题均利用DFS回溯法,涉及组合枚举、动态规划和字符串处理,展示了算法在数学问题和实际应用中的灵活性。 关键词:DFS回溯、动态规划、组合数学、字符串处理、算法设计
2026-08-08 11:16:24
248
原创 搜索算法及相关题目
本文介绍了深度优先搜索(DFS)算法的核心概念与实现。DFS采用"一条路走到黑"的策略,通过递归或手动栈实现,适用于树/图的遍历、路径搜索等问题。文章对比了DFS与BFS的特点,指出DFS适合方案枚举而BFS适合最短路径求解。通过岛屿数量问题展示了DFS的实际应用:遍历网格时,每发现新陆地就启动DFS将其连通区域标记为已访问,从而统计独立岛屿数量。最后提供了DFS的递归和迭代两种代码模板。
2026-08-07 09:15:24
248
原创 河南萌新联赛(三)赛后补题
文章摘要 本文总结了河南萌新联赛(三)中三个典型算法题的解题思路和代码实现: A题:任务安排的最优初始能量计算。使用贪心算法,将任务分为增益和消耗两类,分别按特定规则排序后模拟执行过程,计算最小初始能量。 B题:寻找最长平衡子串。利用前缀和与哈希表,记录特征二元组首次出现位置,快速判断满足条件的子串区间,优化时间复杂度至O(n)。 C题:删除连续区间使剩余和能被m整除。通过前缀和取模,结合数学推导和哈希表,寻找最短删除区间,保证剩余元素满足条件。 这些题目涵盖了贪心、前缀和、哈希表等核心算法技巧,展示了如何
2026-08-04 17:46:04
225
原创 2026河南萌新联赛补题
本文是对2026河南萌新联赛(二)三道典型题目的解析与代码实现: B题(数学分块):计算∑⌊x/i⌋(i=1到y)。针对大数范围(x≤1e12,y≤1e18),采用数学分块法优化,通过寻找商值相同的区间批量计算,降低时间复杂度至O(√x)。 L题(字符串统计):维护字符串集合,支持添加、查询和删除操作。使用map记录字符串出现次数,操作1计数并返回总次数,操作2查询存在性,操作3减少计数并在归零时移除。 G题(网格覆盖统计):处理2000×2000网格中n≤2e5个矩形覆盖问题。通过二维差分统计总覆盖次数,
2026-08-04 14:50:05
235
原创 二叉树遍历和题目分析
二叉树学习总结 核心概念:二叉树是一种递归有序的树形结构,每个节点最多有两个子节点(左、右子树),具有四种常见类型(普通、满、完全、二叉搜索树)。二叉搜索树(BST)的中序遍历结果是有序数组,这是解决BST问题的关键。 遍历方法: 深度优先(DFS):前序(根→左→右)、中序(左→根→右)、后序(左→右→根),可通过递归或迭代实现。 广度优先(BFS):层序遍历,使用队列逐层访问节点。 应用示例: 求二叉树深度:通过DFS递归遍历,记录最大层数。 三种遍历输出:分别按前序、中序、后序规则递归访问节点并输出值
2026-07-31 18:10:33
210
原创 bitset的简单介绍和应用
本文介绍了C++中的bitset容器及其在动态规划问题中的应用。bitset作为固定长度的二进制位容器,具有空间效率高、支持快速位运算的特点。文章通过两个示例题目展示了如何用bitset优化背包类问题的解法: 比赛选题问题(NC276144):使用bitset高效记录可达状态,通过位运算快速更新状态,求解与目标值最接近的总和。 区间选数平方和问题(NC17193):利用bitset的位操作特性,高效统计所有可能的平方和组合数。 文章还简要提及了位运算在acwing 998题目中的应用,强调二进制位独立运算的
2026-07-30 20:01:40
189
原创 字符串和stack的相关题解
文章摘要: 今日学习总结了字符串与栈的应用,通过四道题目巩固栈的先进后出特性: LeetCode 859 判断两字符串能否通过交换两个字符相等,需处理相同字符或两处差异的情况。 NC14326 模拟火车进出站,用栈检查给定车厢顺序是否合法,不合规则输出"No"。 NC14666 结合栈与差分数组,计算放置屏障后防守能力的最大降幅,输出最优位置。 NC15029 处理泡泡合并("oo"→"O")与爆炸("OO"消失)的连锁反应,最终输出稳定状态。 代码均通过栈结构高效解决问题,强化了对栈操作的理解。
2026-07-29 17:37:00
166
原创 优先队列和哈希相关题解
本文总结了优先队列和哈希的学习内容及解题方法。优先队列部分包括相对名次排序(506题)、数据流第K大元素(703题)、数组中第K大元素(215题)、丑数问题(264题)和动态中位数(106题),主要使用大小根堆进行高效处理。哈希部分涉及存在重复元素(217题)、找不同字符(389题)、无重复字符最长子串(3题)和单词拆分(139题),利用哈希表实现快速查找和去重。其中牛客网"Masha与老鼠"一题难度较大,暂未解决。文中提供了多种解法(如排序+哈希、优先队列、三指针DP等)及详细代码实现,展现了数据结构在算
2026-07-28 19:21:24
207
原创 map函数的题目应用
本文总结了C++中map容器的基本特性(键值唯一、自动排序、高效查找)及其应用。通过分析力扣205题(同构字符串判断)、1309题(字母解码)以及计蒜客T1271(完美子数组)、T3603(优先级调度)四道典型题目,展示了map在字符串处理、数字分组、优先级管理等场景的实际应用。每道题都提供了清晰的解题思路和完整代码实现:205题使用双向映射验证字符对应关系;1309题通过分情况处理不同编码规则;T1271利用余数分组寻找最长子数组;T3603则综合运用map和set实现多操作优先级队列管理。这些案例充分体
2026-07-25 09:04:41
223
原创 stack和vector在实际问题中的应用
本文介绍了C++ STL中的stack和vector容器及其应用。stack遵循LIFO原则,常用于括号匹配问题;vector是动态数组,支持多种操作。文章提供了多个力扣题目的详细解答: 有效的括号(20):利用栈匹配括号类型 下一个更大元素I(496):通过遍历查找后续更大元素 每日温度(739):使用单调栈计算升温等待天数 括号的分数(856):通过栈计算嵌套括号的分数 最长有效括号(32):采用动态规划方法求解 每个题目都给出了核心思路和完整代码实现,涵盖了栈和数组的典型应用场景。
2026-07-25 09:03:07
221
原创 queue函数的应用
本文总结了队列(queue)在算法题中的应用,主要包括以下内容: 滑动窗口问题(洛谷P1886/牛客NC50528):使用双端队列维护窗口最大值和最小值 时间窗口统计(洛谷P2058):利用队列处理24小时内不同国籍乘客统计 最大子段和问题(洛谷P1714):结合前缀和与单调队列求长度受限的最大子数组和 队列实现栈(力扣225):通过两个队列模拟栈的后进先出特性 文章提供了各题目的AC代码和解题思路,重点展示了队列在滑动窗口和单调性维护方面的应用技巧。
2026-07-24 09:23:25
243
原创 2026萌新联赛(一)
文章摘要 F题是一个拓扑排序问题,要求判断游戏关卡的前置依赖关系是否能形成有向无环图(DAG),若可以则输出字典序最小的通关序列,否则输出"No"。使用Kahn算法结合优先队列实现,时间复杂度O(n+m)。 H题是一个数论问题,要求找出所有大于1的整数k,使得给定序列中每个元素对k取模的余数相同。通过计算所有数对差值的最大公约数g,若g>1则输出g的所有大于1的因数,否则输出"-1"。解法利用同余性质和因数分解,复杂度O(n²+√g)。两题均考察了经典算法在实际问题中的应用。
2026-07-21 17:37:12
229
原创 滑动窗口题解
题目一《海港》要求统计每艘船到达时前24小时内不同国家乘客的总数。使用队列维护滑动窗口,记录乘客国籍并动态更新国家计数,时间复杂度为O(n)。题目二《切蛋糕》需要在数列中找长度不超过m的连续子段使其和最大。使用单调队列维护前缀和的最小值,实现O(n)时间复杂度的求解。两题均采用滑动窗口思想,通过队列高效处理区间统计问题。
2026-07-21 15:36:18
202
原创 Codeforces 二进制数组翻转问题题解(k=1 版本)以及环形追及问题
题目一摘要:本题要求在包含一个特殊下标的二进制数组中进行最少的区间翻转操作(每次操作必须包含特殊下标),使所有元素等于特殊下标处的值。通过统计左右两侧需要翻转的连续段数,最优解为2倍的最大连续段数。算法时间复杂度为O(n)。 题目二摘要:环形追及问题中,灵梦和蕾米莉亚在环形场地上移动,蕾米莉亚有k次移动机会。计算灵梦在最坏情况下抓住蕾米莉亚的最短时间。关键是最小化两个方向(顺时针和逆时针)的距离与移动次数之和,当n≤3时结果为1。算法直接计算两种方向的可能结果取最小值。
2026-06-06 09:38:35
182
原创 Codeforces Problem A. Penchick and Satay Sticks和D - Antimedian Deletion 题解分析
文章摘要: Codeforces题目《Penchick and Satay Sticks》考察受限相邻交换下的排列排序问题。给定排列p,只能交换相邻且差值绝对值为1的元素,判断能否排序为[1,2,...,n]。解法基于位置差值检查:若所有元素p_i满足|p_i-i|≤1则输出"YES",否则"NO"。C++实现时间复杂度O(n)。 另一题《排列操作与可达数组最小长度》要求计算每个元素在操作后的最小存在数组长度。核心结论:当n>1时所有元素答案为2,n=1时为1。解法直接输出对应结果,时间复杂度O(n)。两道
2026-06-05 13:30:14
317
原创 C++算法中set函数的用法
本文介绍了C++ STL中的set容器在算法竞赛中的应用。set具有自动排序、元素去重、高效操作(O(log n))等特点,底层基于红黑树实现。文章详细讲解了set的核心API,包括元素插入(insert)、遍历方法、查找(count/find)、删除(erase)、二分查找(lower_bound/upper_bound)等操作。同时介绍了降序set和允许重复元素的multiset的使用场景。set容器特别适合需要自动维护有序不重复元素的竞赛题目,能显著简化代码并提高效率,是算法竞赛中的重要工具。
2026-06-03 11:18:38
231
原创 C++中queue容器的用法
本文介绍了C++中queue队列容器的基本用法。queue遵循先进先出(FIFO)规则,底层默认用deque实现。主要内容包括:1)队列的创建和头文件引入;2)核心成员函数如push()、pop()、front()等;3)队列的基本操作演示;4)存储自定义结构体的方法;5)常见易错点,如不支持下标访问、需先判断非空再操作等。队列只能通过front()+pop()循环遍历,使用时需注意空队列保护和pop()无返回值的特性。文章通过代码示例展示了队列的基本使用方法和注意事项。
2026-05-29 12:41:51
42
原创 2026年临沂大学程序设计挑战赛B题和E题
摘要:本文包含两个算法问题的解决方案。第一个问题要求计算使两个数不互质的最小修改次数,通过判断gcd值分三种情况处理,时间复杂度为O(Tlogmax(a,b))。第二个问题统计字符串中按顺序出现的"LYU"三元组数量,通过维护前缀计数避免三重循环暴力解法,实现线性时间复杂度。两个解决方案都针对性地优化了算法效率,避免了不必要的计算复杂度。
2026-05-22 16:07:34
48
原创 2022吉林ICPC E题和B题
摘要:本文包含两道编程题解。第一题通过二进制位运算分析,发现要使结果为1需要相邻的偶数和奇数,通过排序和遍历数组解决。第二题要求高精度除法输出多位小数,通过字符串处理余数实现逐位计算,并处理四舍五入。两题均给出完整C++代码实现,分别使用位运算特性和字符串模拟除法运算来解决问题。
2026-05-21 22:00:00
41
原创 C++中stack的用法
C++ STL中的stack容器适配器遵循LIFO(后进先出)原则,需包含<stack>头文件。基本定义格式为stack<数据类型>容器名。常用成员函数包括:push(x)入栈、top()取栈顶元素、pop()出栈、empty()判空、size()获取元素个数和swap()交换栈。遍历栈只能通过循环取top后pop的方式,且操作前必须判空以防崩溃。stack底层基于deque实现,仅开放栈顶操作。易错点包括:不能下标访问、空栈操作会崩溃、pop()无返回值等。使用时需严格遵守后进先出
2026-05-21 17:43:50
46
原创 5.15题目
1.前缀和这道题看着十分简单,让人很容易想到用循环累加求和,但在数据较大或者较多时很容易超时,其实这是一道前缀和类型的题,只有每次输入数据都求出前缀和,就很容易得出结果2.最大公约数3.字母的添加这道题就是当出现n时,后面加上g或者
2026-05-15 14:30:17
29
原创 深度理解C++核心容器:vector,string,map
本文介绍了C++ STL中三种常用容器的基本用法:1. vector动态数组,支持push_back插入、insert指定位置插入、erase删除、sort排序和find查找等操作;2. string字符串类型,涵盖构造方法、赋值操作、多种遍历方式(下标、迭代器、for循环)、插入(push_back/append/+=/insert)和删除(erase/pop_back)操作,以及getline读取整行输入;3. map键值对容器,具有自动排序特性,演示了初始化、插入、修改、查找、删除、遍历以及范围查询等
2026-05-08 14:33:07
193
原创 【无标题】
本文包含两个算法题目解析:第一题是关于最大子段和的动态规划解法,通过维护当前子段和和全局最大值,在O(n)时间内解决问题。第二题介绍了滑动窗口问题,使用单调队列高效求出每个窗口的最小值和最大值,时间复杂度为O(n)。两个题目都强调了优化算法的重要性,特别是在处理大数据量时,暴力解法容易超时。最大子段和问题中需要处理连续子序列的最大和,而滑动窗口问题则展示了如何利用双端队列维护窗口极值。
2026-05-06 12:40:45
397
原创 两种思维模式搞定递归
递归算法本质是通过穷举解决问题的编程手段,其核心在于将复杂问题分解为子问题。本文通过斐波那契数列和全排列两个案例,揭示了递归的两种思维模式:分解问题(如斐波那契数列的分治法)和遍历搜索(如全排列的回溯法)。斐波那契案例展示了如何通过函数定义分解问题,而全排列则演示了通过交换元素遍历所有可能性的递归实现。文章强调理解递归的关键在于将其视为树形结构的处理过程,并指出这两种思维模式分别对应动态规划/分治算法和DFS/回溯算法。掌握这两种递归思维方式,特别是结合二叉树问题的练习,能够有效提升算法设计与分析能力。
2026-04-29 12:51:40
242
原创 4.25第一篇
然后开始从最高的树开始模拟砍,砍到它与下一课树高度相同,20-17=3先得到3米,剩下树得高度为 17 17 15 10,再与需要的7米比,不够继续往下砍(17-15)*2+3=7,刚好得到7米,模拟结束,剩余树得高度分别为15 15 15 10,此时就能得到锯片最高应为15。为了模拟守卫的变化,公子光使用了一个特殊装置,装置上有 27 个按键,分别对应小写英文字母 a-z 和删除键 D。按照这个方法写成代码,就能通过这道题,因为数据并不大,所以这个做法能通过,二分绝对是最佳做法。
2026-04-25 16:36:29
206
原创 通俗易懂!一文搞懂广度优先搜索(BFS)
BFS(广度优先搜索)是一种基于队列的图遍历算法,其核心在于"层层扩散、由近及远"的搜索策略。它通过维护先进先出的队列结构,确保优先处理距离起点最近的节点,从而保证首次到达终点时找到的就是最短路径。典型应用场景包括迷宫最短路径、社交网络关系搜索和连通区域统计等。算法实现时需注意两点:必须标记已访问节点避免重复计算,同时要严格检查边界条件防止越界。BFS的时间复杂度为O(V+E),适合解决无权图的最短路径问题,其分层探索的特性使其成为解决最短路径类问题的高效工具。
2026-04-14 20:04:05
260
原创 算法图解:彻底搞懂二分查找
如果你在寻找左边界时,当 nums[mid] == target 却把 right 设为 mid ,在 left == right 时会永远循环。- 循环条件 left <= right :因为是 [left, right] 区间,当 left == right 时,区间还有一个元素有效,必须进入循环判断。- 目标小于中间值,说明新的右边界要在 mid 的左边,所以 right = mid - 1。- 对比:线性查找 O(n),在数据量大时,二分查找的优势是碾压级的。
2026-04-09 20:53:00
307
原创 突破数值限制:高精度算法从原理到实战
本文介绍了高精度算法的原理与实现方法,用于解决计算机原生数据类型无法处理超大数运算的问题。高精度算法通过数组或字符串逆序存储数字每一位,模拟手工计算过程,主要包括加法、减法和乘法运算。文章详细阐述了三种运算的核心原理和C语言实现代码,并提出了压位优化、前导零处理等技巧。该算法在算法竞赛、金融计算和科学研究等领域有广泛应用,能有效突破计算机数值范围限制,实现超大数的精确运算。
2026-04-01 18:38:28
268
原创 一文吃透贪心算法:从入门到实战,轻松掌握高效算法思
贪心算法是一种基于局部最优选择来寻求全局最优解的高效算法。文章从核心原理、适用条件、经典例题和常见误区四个维度系统介绍了贪心算法。其核心思想是每一步都做出当前最优选择,适用于具有贪心选择性质和最优子结构的问题。文中通过活动选择、零钱兑换和跳跃游戏等经典例题,展示了贪心算法的实际应用,并指出验证策略正确性的重要性。文章还对比了贪心算法与动态规划的区别,强调贪心算法简单高效的特点。最后总结了正确使用贪心算法的关键:找对策略并验证其正确性。
2026-03-31 20:19:06
633
原创 告别模糊估计:教你吃透算法的「空间复杂度」
摘要: 空间复杂度衡量算法运行时临时占用存储空间的增长趋势,重点关注随输入规模n变化的可变部分(变量、数组、栈空间等)。计算遵循三步:识别变量、分析维度(标量O(1)、一维O(n)、二维O(n²)等)、忽略常数项。常见场景包括O(1)原地交换、O(n)数组存储、O(n)递归栈、O(n²)矩阵等。优化时需权衡时空,如原地算法节省空间,或预分配空间(如动态规划)换取时间效率。核心原则:空间复杂度反映存储需求与输入规模的关系,是算法稳定性和扩展性的关键指标。
2026-03-26 16:31:13
232
原创 深度解析:算法时间复杂度的数学定义与计算实践
摘要:时间复杂度是衡量算法效率的核心指标,用大O符号表示算法运行时间随输入规模n的增长趋势。常见复杂度等级包括O(1)、O(logn)、O(n)、O(nlogn)、O(n²)、O(2ⁿ)和O(n!)。计算复杂度遵循加法法则(取最大)、乘法法则(嵌套相乘)和忽略常数系数。通过分析典型代码片段,如单循环、步长循环和嵌套循环,可以判断其时间复杂度。掌握时间复杂度分析有助于优化算法性能,是编程和算法学习的基础技能。
2026-03-25 11:39:23
468
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅