- 博客(114)
- 收藏
- 关注
原创 About寻找最大好友对数排列的实现
该代码解决"寻找最优排列"问题:给定n个数字和m对好友关系,通过递归回溯生成所有排列,统计相邻元素为好友的对数,最终输出最大好友对数及对应排列。核心思路是使用深度优先搜索(DFS)生成全排列,对每个排列检查所有相邻元素是否在好友关系中,记录最大值。变量包括存储排列的数组a、标记数组mark、最优排列ret等。时间复杂度为O(n!×n×m),由于n≤12,算法可行。示例展示了基础输入、无好友关系和全好友关系三种情况的运行结果。该算法直观展示了递归回溯在排列组合问题中的应用。
2025-11-01 00:22:31
646
原创 About计算带乘法优先级的表达式结果的实现
这段代码实现了一个表达式求值功能,专门处理仅包含加法和乘法的数学表达式。代码采用"先乘后加"的策略,通过临时变量t存储乘法中间结果,变量s累加已处理的加法结果。每次运算都对10000取模以防止溢出。核心逻辑是循环读取运算符和数字:遇到乘法时立即计算并更新t;遇到加法时将当前t值累加到s并重置t。时间复杂度O(n),空间复杂度O(1)。示例展示了基础表达式、全乘式和带模运算的处理过程,体现了优先级分离的算法思想。
2025-11-01 00:19:34
679
原创 About处理算术表达式并输出结果的实现
这段代码处理多组算术运算(加、减、乘),根据输入的运算类型和操作数生成表达式字符串并计算其长度。通过条件判断处理两种输入格式(带运算类型或不带),使用sprintf函数生成表达式(如"2+3=5"),用strlen计算字符串长度后输出。时间复杂度为O(n),空间复杂度为O(1)。关键点包括输入格式处理、字符串格式化和长度计算。示例输入"a23"输出"2+3=5"和5。
2025-11-01 00:16:55
885
原创 About选择最优购票方案的实现
本文解决购票方案最优选择问题,给定目标票数n和三种购票方案(每组票数及价格),计算购买至少n张票的最低花费。核心算法是对每种方案计算所需花费:若n不能被组数整除则向上取整多买一组,比较三种方案的花费后取最小值。通过设置大数初始值确保正确更新最低花费,代码时间复杂度O(1),空间复杂度O(1)。示例验证了整除、非整除及边界情况的正确处理,展现了枚举最优解的高效方法。
2025-11-01 00:14:17
676
原创 About基于归并归排序计算逆序对数量的实现
摘要:本文详细解释了利用归并排序计算数组逆序对数量的算法。核心思想是在归并排序的合并过程中统计逆序对,当右子数组元素小于左子数组元素时,左子数组剩余元素均与该右元素构成逆序对。算法时间复杂度为O(nlogn),空间复杂度O(n)。代码使用longlong存储逆序对总数,避免溢出。示例分析展示了算法的执行过程和正确性。该方法结合分治思想,高效解决了大规模数据下的逆序对统计问题。
2025-11-01 00:12:19
697
原创 About求解数字序列中第 n 位数字的实现
这段代码求解无限数字序列"123456789101112..."中的第n位数字。通过预处理1-99999的数字长度累积值,快速定位目标数字。算法分为四步:1)预处理各数字位数的累积长度;2)定位n所在的数字范围k1;3)计算n在k1中的偏移量;4)确定具体数字k2并提取指定位置的数字。时间复杂度O(1)(预处理后),空间复杂度O(1e5)。核心思路是利用预处理数据快速定位,再通过数学运算提取目标位,避免了逐位查找的低效问题。
2025-11-01 00:10:29
727
原创 About木材切割问题的二分查找实现
这是一个求解木材切割问题的二分查找程序。给定n根木材及其长度,要求找到最大切割高度h,使得所有木材被切割到高度h时,总木材长度≥m。程序先将木材长度存入数组,设定二分边界为0到最长木材长度。通过二分查找确定中间高度mid,用check函数计算该高度下的总木材长度:不足m则调低高度,否则尝试更高高度。最终输出最大满足条件的切割高度l-1。算法时间复杂度为O(nlogL),适合大规模数据。关键点包括正确使用二分查找、longlong避免溢出,以及理解循环终止条件。
2025-11-01 00:08:07
840
原创 About根据前序与中序遍历序列重建二叉树并输出后序遍历的实现
这段代码实现了根据二叉树前序和中序遍历序列重建二叉树并输出后序遍历的功能。算法利用前序序列确定根节点,通过递归遍历处理左右子树:首先读取中序(zx)和前序(xx)序列,在递归函数fun中,通过双重循环找到当前子树的根节点,然后分别处理左子树(left,j-1)和右子树(j+1,right),最后按后序顺序输出根节点。该算法时间复杂度为O(n²),空间复杂度为O(n),巧妙运用了二叉树遍历的特性,通过递归划分实现序列转换。
2025-11-01 00:04:06
915
原创 About全排列生成算法的实现
摘要:该代码实现了生成1到n所有全排列的递归回溯算法。使用used数组存储当前排列,a数组标记已用元素避免重复。递归函数print(k)处理第k个位置,当k=n时输出排列结果。时间复杂度为O(n×n!),空间复杂度O(n)。通过回溯机制撤销元素标记,确保生成所有可能排列。示例显示对于n=3输出6种排列。该算法清晰展示了递归和回溯的应用,是排列组合问题的经典解法。
2025-11-01 00:01:17
684
原创 About计算数组元素与目标数组元素最小差值之和的实现
该代码解决高考志愿填报中的分数匹配问题,通过二分查找算法高效计算考生分数与学校录取线的最小差距总和。首先对学校分数线数组进行排序,然后使用lower_bound和upper_bound函数定位每个考生分数在排序数组中的位置,分三种情况处理差值:分数低于所有学校、高于所有学校或在中间区间。通过累加最小差值获得最终结果。算法时间复杂度为O(mlogm+nlogm),适用于大规模数据,关键点在于正确运用二分查找处理边界情况,并使用大整数类型存储结果防止溢出。
2025-10-31 23:30:25
696
原创 About查找两个数组交集元素的实现
摘要:本文解析了一个使用二分查找算法高效求解两个数组交集元素的C++代码。代码首先对第二个数组排序,然后遍历第一个数组,通过binary_search函数判断元素是否存在于第二个数组中。时间复杂度为O(mlogm+nlogm),比暴力搜索法更高效。关键点包括排序的必要性、二分查找的使用以及保持输出顺序与输入数组一致。文中提供了详细变量说明、核心逻辑分析、复杂度评估以及运行示例,展示了"预处理+高效查询"的算法思想在实际问题中的应用。
2025-10-31 23:25:56
458
原创 About统计矩形中对角线与非对角线矩形数量的实现
这段代码通过四层循环枚举平面网格上所有可能的矩形,统计其中正方形和普通矩形的数量。外层循环遍历所有可能的左上角顶点(i,j),内层循环遍历对应的右下角顶点(x,y),x>i且y>j时构成有效矩形。判断矩形的长(x-i)和宽(y-j)是否相等,相等则计入正方形计数z,否则计入普通矩形计数c。时间复杂度为O(n²m²),空间复杂度为O(1)。示例说明展示了不同输入下如何分类计数,如输入"1 1"输出"1 0","2 1"输出"2
2025-10-31 23:24:46
678
原创 About基于 DFS + 记忆化的二维矩阵最长递增路径求解
本文介绍了一种求解二维矩阵中最长严格递增路径的DFS+记忆化算法。算法通过深度优先搜索遍历所有可能的路径起始点,利用记忆化数组存储中间结果以避免重复计算,将时间复杂度优化至O(n×m)。代码采用方向数组处理相邻单元格移动,通过严格递增条件确保路径无环。输入处理从(1,1)开始简化边界判断,最终输出全局最长路径长度。该算法适用于任意整数矩阵,其核心是通过记忆化剪枝将指数级复杂度降至线性级,是动态规划与搜索结合的典型案例。
2025-10-31 23:18:50
539
原创 About最长递增路径长度求解(DFS + 记忆化)
该代码用于求解二维矩阵中最长严格递增路径的长度。通过深度优先搜索(DFS)遍历所有可能的路径,结合记忆化存储避免重复计算,显著提高效率。算法从每个未访问的单元格出发,递归探索四个方向上的相邻单元格(需满足值严格大于当前单元格),并利用记忆化数组记录每个单元格作为起点的最长路径长度。最终输出全局最大值。时间复杂度为O(n×m),空间复杂度为O(n×m)。该算法适用于任意大小的矩阵,能高效处理严格递增路径问题。
2025-09-27 11:38:51
888
原创 About字符串单词匹配与统计
这段代码用于统计文本中指定单词的出现次数及首次出现位置。核心逻辑包括:1)统一转为小写消除大小写差异;2)通过空格分割文本单词;3)精确匹配完整单词。代码先读取目标单词和待检索文本,在文本末尾补空格确保最后一个单词能被处理。通过遍历文本逐字符拼接单词,遇到空格时与目标单词比较。匹配成功则计数并记录首次位置。时间复杂度为O(n),空间复杂度为O(n)。关键点包括末尾补空格、大小写转换和完整单词匹配。示例展示了基本匹配、未找到和首次位置计算三种情况。
2025-09-27 11:38:49
707
原创 About 最大正方形面积求解(动态规划)
这篇文章摘要: 本文详细解析了求解二进制矩阵中最大全1正方形边长的动态规划算法。核心思路是通过dp数组记录每个位置作为右下角时能构成的最大正方形边长。状态转移方程为:若当前元素为1,则dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1。算法时间复杂度为O(n×m),空间复杂度为O(n×m)。关键点包括从1开始索引简化边界处理、递推公式的几何意义理解(依赖三个相邻方向的最小边长)以及全局最大值维护。示例说明展示了具体计算过程,最终输出边长的最大值。
2025-09-27 11:38:43
403
原创 About 整数反转
这段代码实现了整数反转功能,通过循环提取原数的每一位数字并按新顺序组合。核心逻辑是:1)使用n%10获取最后一位数字;2)ans*10左移已有结果;3)拼接新数字。循环通过n=n/10移除已处理数字,直到n=0结束。时间复杂度O(log₁₀n),空间复杂度O(1)。支持正负数处理,但存在整数溢出风险,建议改用long long类型并添加溢出检查。示例:输入123输出321,输入-500输出-5(自动去除前导零)。
2025-09-27 11:27:26
869
原创 About中篇:NOI 2025大纲提高级完全攻略|省一必备算法精讲
本文深入讲解提高级算法竞赛(CSP-S/NOIP)的核心内容,包括图论算法(Dijkstra最短路径)、动态规划进阶(树形DP)和数据结构进阶(线段树),提供详细代码实现和复杂度分析。针对省一冲刺目标,制定了6个月训练计划,分基础巩固、专题突破和实战提升三个阶段,并解答调试技巧、复杂度优化等常见问题。文章最后预告下篇将介绍NOI级高级算法,为全国决赛冲金做准备。
2025-09-27 11:10:00
442
原创 About 上篇:NOI 2025大纲入门级完全解析|零基础到CSP-J获奖
本文为NOI大纲解读系列首篇,全面解析入门级(CSP-J)知识点。大纲将内容分为入门、提高、NOI三级,CSP-J作为竞赛起点,培养计算思维并具有升学加分优势。知识体系涵盖编程基础(变量、循环等)、数据结构(栈、队列、二叉树)和算法(枚举、DFS/BFS)。提供3个月高效学习计划:首月掌握语法,次月学习数据结构算法,末月综合训练。针对常见问题给出调试方法、算法理解技巧等解决方案,并推荐必刷题目和学习资源。下篇将讲解提高级核心算法,助力冲击省一。
2025-09-27 11:08:27
553
原创 下篇:NOI级金牌算法完全掌握|国赛冲金终极指南
本文系统讲解了NOI/IOI级别的高级算法与竞赛技巧。首先分析了NOI级算法的三大特点:思维深度、实现复杂度和综合性,并提出"理解原理-经典入手-数学证明"的学习策略。重点剖析了树链剖分、网络流建模和FFT等核心算法,通过代码模板展示实现细节。以NOI2021真题为例,演示树链剖分的实战应用。最后分享了金牌选手的三大训练方法(论文学习、专题训练、模拟实战)和必备资源工具(进阶指南、集训队论文、竞赛题库等),为选手冲刺全国金牌提供完整的备赛方案。
2025-09-27 00:21:39
692
原创 About 二叉树先序遍历(字符节点)
这篇文章介绍了字符节点二叉树先序遍历的实现方法。代码通过深度优先搜索(DFS)递归遍历二叉树,按照"根→左→右"的顺序输出节点。文章详细解释了数据存储结构(使用ASCII值索引的二维数组)、递归遍历逻辑、时间复杂度O(n)和空间复杂度O(h)分析,以及输入处理流程。关键点包括空节点标记处理、ASCII索引映射和先序遍历顺序的严格遵循。文章还提出了可能的改进建议,如使用map支持更多字符类型、迭代法避免递归栈溢出等。该实现简洁高效,适合理解二叉树递归遍历的基本原理。
2025-09-26 23:59:55
805
原创 About 字符串交叉匹配组合数计算
摘要: 这段代码用于计算两个字符串中满足特定交叉匹配条件的组合数。核心逻辑是通过双层循环遍历两个字符串,寻找相邻字符的反向匹配(即front[i]==back[j]且front[i+1]==back[j-1])。每找到一个匹配,计数器cou加1。最终结果为2的cou次方,表示所有可能的组合方式总数。代码时间复杂度为O(n*m),空间复杂度为O(n+m),适用于中小型字符串匹配问题。示例输入"ab"和"ba"会输出2,因为找到1次匹配,2^1=2。
2025-09-26 23:56:01
862
原创 About 13 号星期五统计问题
这段代码统计从1900年开始的n年中,每月13号对应星期一到星期日的次数。采用三层循环结构遍历日期,通过判断闰年处理二月天数差异,使用map记录13号对应星期的次数。关键点包括:正确初始化基准星期(1900年1月1日为周一)、完整闰年判断(区分世纪闰年和普通闰年)、星期循环重置逻辑。时间复杂度为O(n),空间复杂度O(1)。输出按特定顺序排列(周六至周五),示例验证显示代码正确性。建议优化:用数组替代map提升效率,简化星期重置条件,改善变量命名增强可读性。
2025-09-26 23:42:58
817
原创 About 资源槽轮换算法解析与实现3
摘要:本文详细介绍了一种适用于有限资源槽场景的轻量级资源调度算法——资源槽轮换算法。该算法通过实时监控资源使用状态,在资源耗尽时自动替换为后续待处理资源,确保资源槽的高效利用。文章内容包括算法背景、C++实现代码(含详细注释)、核心逻辑解析、复杂度分析及实例验证,展示了该算法在服务器调度、打印队列管理等场景的应用价值。算法采用贪心策略,具有实现简单、效率高的特点,时间复杂度为O(k×m),空间复杂度为O(n+m)。
2025-09-26 23:36:57
665
原创 《NOI 2025大纲提高级深度解析(CSP-S/NOIP必看)|含算法模板与真题训练》
2025NOI提高级大纲解析:冲刺省一必备指南!本文详解NOIP/CSP-S核心考点,包括Dijkstra、线段树、动态规划优化和数论进阶等知识点,并提供模板代码和真题训练路径。大纲将知识点按难度(5-8级)分类,涵盖数据结构、算法、数学等核心内容,建议6个月系统学习路线,每日3-5题训练。附必备代码模板、常见问题解答和资源推荐,助你突破算法竞赛瓶颈。文末互动环节可获取定制学习计划,下期将揭秘NOI级金牌算法。
2025-09-16 00:19:19
1461
原创 《NOI 2025大纲全面解析(入门篇)|信息学竞赛必读,附学习路线与资源推荐》
《NOI 2025大纲全面解析(入门篇)|信息学竞赛必读,附学习路线与资源推荐》
2025-09-16 00:18:23
2186
原创 About 资源槽轮换算法解析与实现2
这段C++代码实现了一个资源分配算法,用于计算处理所有资源所需的最少总轮数。输入包括资源槽数量m和总资源数n,以及每个资源的使用次数。算法核心是将后续资源(n-m个)依次分配到当前使用次数最少的资源槽中,最后取资源槽中的最大使用次数作为结果。时间复杂度为O((n-m)*m+m),空间复杂度为O(n)。代码中存在潜在问题:内层循环条件应为j<=m而非j<=m-i,且排序部分仅进行了一轮交换而非完整排序。改进建议包括修正循环条件和采用完整排序算法。该算法通过贪心策略实现负载均衡,确保处理效率最优。
2025-09-16 00:09:13
423
原创 About 资源槽轮换算法解析与实现
本文介绍了一个资源管理和使用的模拟问题,涉及m个资源槽和n个后续资源。每个资源有使用次数限制,使用完毕后会被替换为下一个资源。文章通过C++代码实现这一过程,并进行详细解析,包括输入处理、初始化、模拟过程和输出结果。复杂度分析指出时间复杂度为O(k×m),空间复杂度为O(n+m)。关键点包括资源替换机制和循环终止条件。通过示例运行,展示了代码的实际操作和结果输出,最终得出处理所有资源所需的总轮数。
2025-05-10 14:10:12
402
原创 About 高效分段算法:最小化数组分段数
本文介绍了一个解决数组分段问题的C++代码。给定一个包含n个整数的数组和一个整数m,目标是将数组分成若干段,使得每段的和不超过m,并且分段数尽可能少。代码通过贪心算法实现:遍历数组,累加当前元素到当前段的和sum,若sum超过m,则新开一段并重置sum,若sum等于m,则直接分段并重置sum。遍历结束后,若sum不为0,则需额外分段。代码的时间复杂度为O(n),空间复杂度为O(n)。关键点在于贪心策略和边界处理,确保分段数最少。示例展示了代码的运行过程和结果。
2025-05-10 14:10:09
371
原创 About 找出数组中第k小不同元素的代码解析
该代码用于在给定数组中查找第k小的不同元素。首先,程序读取数组长度n和k值,然后读取数组元素并进行排序。通过遍历排序后的数组,统计不同元素的数量,当找到第k个不同元素时,记录该元素并输出。如果未找到,则输出“NORESULT”。时间复杂度为O(nlogn),主要由排序操作决定,空间复杂度为O(n)。代码处理了边界条件,确保在k大于不同元素总数时正确输出“NORESULT”,并通过排序保证不同元素按升序统计。
2025-05-10 14:07:09
249
原创 About 1900年起n年内13号星期分布统计
本文介绍了一个用于统计1900年开始的n年内,每个月13号落在不同星期几的次数的C++程序。程序通过遍历每个月的每一天,使用一个map来记录13号对应的星期几。特别地,程序处理了闰年的2月天数问题。最终,程序按照星期六到星期五的顺序输出统计结果。时间复杂度为O(n×12×31),空间复杂度为O(1)。关键点包括闰年的判断规则、星期的循环计算以及输出顺序的调整。
2025-05-10 14:01:35
515
原创 About 揭秘字符串对称匹配:2的幂次方之谜
本文介绍了一个算法,用于计算两个字符串中满足特定对称条件的相邻字符对数量,并输出2的该数量次幂。算法通过双重循环遍历两个字符串中的所有相邻字符对,检查是否满足front[i] == back[j]且front[i+1] == back[j-1]的条件。满足条件的字符对数量cou被统计,最终输出2^cou。算法的时间复杂度为O(m×n),其中m和n分别是两个字符串的长度,空间复杂度为O(1)。示例中,输入字符串“abba”输出2,因为存在一个满足条件的字符对。
2025-05-10 13:34:47
302
原创 About 二叉树先序遍历:代码详解与复杂度分析
本文介绍了一个用于先序遍历二叉树的C++程序。程序通过二维数组a[200][2]存储二叉树结构,其中a[节点ASCII值][0]和a[节点ASCII值][1]分别表示左子节点和右子节点。先序遍历函数dfs采用递归方式,按根-左-右的顺序访问节点。主函数首先读取节点数量,然后逐个读取节点信息并存储,最后从根节点开始遍历。程序的时间复杂度为O(n),空间复杂度为O(1)。关键点包括利用字符ASCII值作为索引、递归实现先序遍历以及识别根节点。示例运行展示了输入和输出结果,验证了程序的正确性。
2025-05-10 13:34:26
366
原创 About q进制转p进制:高效实现与代码解析
本文介绍了如何将一个 q 进制的数 k 转换为 p 进制的数,并提供了详细的代码解析和复杂度分析。代码首先将 q 进制的数转换为十进制数,再通过除 p 取余法将其转换为 p 进制的数,并使用栈来反转余数顺序以确保输出正确。时间复杂度为 O(m + logp(n)),空间复杂度为 O(logp(n))。需要注意的是,代码未处理输入验证和数值溢出的问题,因此在处理大数时可能出错。
2025-05-10 12:58:09
279
原创 About 快速排序算法详解与复杂度分析
本文介绍了如何使用快速排序算法对包含n个整数的数组进行升序排列。代码解析部分展示了程序的整体结构,包括全局变量、快速排序函数srt和主函数。详细解释部分阐述了快速排序的实现细节,包括基准选择、分区过程和递归排序。复杂度分析指出,快速排序的平均时间复杂度为O(n log n),最坏情况下为O(n^2),空间复杂度为O(log n)。关键点包括基准选择、分区逻辑和递归边界控制。示例运行展示了输入和排序后的输出结果。通过本文,读者可以理解并实现快速排序算法。
2025-05-10 12:46:45
249
原创 About 高效寻找连续正整数序列和等于m的妙招
文章解析了如何找出所有连续正整数序列,使其和等于给定整数 m。初始代码通过预处理前缀和数组并嵌套循环枚举序列,时间复杂度为 O(m²),空间复杂度为 O(m)。优化后的代码采用双指针法,将时间复杂度降低到 O(m),空间复杂度为 O(1)。注意事项包括算法优化和边界条件的处理,如允许单个数字的序列需调整判断条件。
2025-05-10 12:42:11
287
原创 About 高效统计数组逆序对的深度解析
本文介绍了如何计算给定整数数组中的逆序对数量。逆序对定义为数组中满足i < j且a[i] > a[j]的下标对(i, j)。代码解析部分展示了一个使用C语言编写的解决方案,通过双重循环遍历数组来统计逆序对数量,时间复杂度为O(N^2),空间复杂度为O(N)。该算法适用于小规模数据,但对于大规模数据,建议使用归并排序或树状数组等更高效的算法,将时间复杂度优化至O(NlogN)。
2025-05-10 12:27:16
310
原创 About 高效统计数组差值对:双指针法解析
本文介绍了一种统计数组中满足特定差值的数对数量的方法。给定一个包含n个整数的数组a和一个整数c,要求统计所有满足a[j]-a[i]=c且i<j的数对(i,j)的数量。代码首先读取数组长度n和目标差值c,然后对数组进行排序。接着,使用双指针法遍历数组,找到满足条件的区间,并统计有效数对的数量。时间复杂度主要由排序和双指针遍历决定,分别为O(nlogn)和O(n),总时间复杂度为O(nlogn)。空间复杂度为O(n)。关键点包括通过排序和双指针法高效查找满足条件的元素,并通过区间统计快速计算有效数对数量。
2025-05-10 12:21:44
304
原创 About 升级版菲波那切数列
给定一个正整数 n,首先计算斐波那契数列的第 n 项(斐波那契数列定义为:F(0)=1,F(1)=1,F(i)=F(i−1)+F(i−2) ,i≥2),并将结果对 2147483648 取模。接着对取模后的结果进行质因数分解,将分解结果以乘法的形式输出,质因数之间用 * 连接。如果结果为 1,则直接输出 1。
2025-05-05 00:19:21
322
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅