- 博客(17)
- 收藏
- 关注
原创 CSP-J 2025赛题解析
CSP-J2025题目解析摘要: 第一题(拼数):从字符串中提取数字字符,按降序排列拼接成最大正整数。如输入"290es1q0"输出92100。时间复杂度O(nlogn)。 第二题(座位):根据成绩排名按蛇形规则分配座位。计算列号c=(k-1)/n+1,行号r由列号奇偶性决定。时间复杂度O(nm)。 第三题(异或和):用异或前缀和与哈希表统计满足条件的不相交区间数量。如输入[2,1,0,3],k=2输出2。时间复杂度O(n)。 第四题(多边形):通过排序和动态规划计算满足sum>2
2025-11-08 10:53:27
1489
1
原创 C++ 中的根号平衡思想:值域分块与莫队算法详解
本文介绍了算法设计中的根号平衡思想及其两大经典应用——值域分块与莫队算法。根号平衡通过分块将问题拆解为大块预处理和小块暴力处理,使时间复杂度降至O(n√n)。值域分块适用于大值域范围统计问题,将值域划分为√V大小的块进行高效查询。莫队算法则通过离线排序和区间分块优化多个区间查询,利用指针移动实时维护答案。文章详细分析了两种方法的核心思想、实现细节、时间复杂度和适用场景,并提供了实战案例和优化技巧。最后强调根号平衡作为"折中之道"在工程实践中的实用价值,体现了分治思想在算法设计中的普适性。
2025-10-25 10:11:43
1106
原创 C++ 动态 DP(Dynamic DP)详解:从入门到实战
动态DP(DynamicDP)是一种结合动态规划和数据结构优化的高级算法,用于解决带动态修改的DP问题。它通过将DP状态转移转化为可维护的线性形式(如矩阵乘法),利用树链剖分和线段树等数据结构实现高效更新。以树上最大独立集为例,动态DP能在修改节点权值时,将单次操作时间复杂度从O(n)优化到O(log²n)。该算法适用于需要频繁修改参数的树形DP问题,如动态维护树上最长路径或子树和等场景。核心实现包括转移矩阵定义、树链剖分预处理和线段树维护,将整体时间复杂度从O(nq)优化到O(n+qlog²n)。
2025-10-25 09:24:30
1433
1
原创 单调栈精讲:核心思路与实战模板
单调栈是一种通过维护栈内元素单调性高效解决数组问题的数据结构,核心逻辑是遍历时弹出破坏单调性的元素并处理。典型应用包括:1)寻找下一个更大/小元素(O(n)时间);2)接雨水问题(递减栈计算凹槽面积);3)柱状图最大矩形(递增栈配合哨兵)。关键点在于:每个元素仅入栈出栈一次,栈中存储索引便于计算宽度,使用哨兵简化边界处理。不同问题需选择递增或递减栈,并灵活搭配哈希表等辅助结构。该技术在解决数组局部极值、区域计算等问题上具有显著优势,是算法面试的必备技能。
2025-10-18 10:35:51
694
原创 高维前缀和与位运算
高维前缀和是将一维前缀和扩展到多维空间的优化技术,能高效计算超矩形区域元素和。通过位运算优化,可快速实现子集前缀和计算,将时间复杂度从O(n^D)降至O(D×2^D)。该技术在状态压缩DP、多条件计数、高维查询等场景应用广泛,特别适合处理二进制表示的维度问题。核心实现包括坐标转换、正向/反向前缀和计算以及利用位操作的子集和优化,是解决复杂高维问题的有力工具。
2025-10-13 20:39:22
594
原创 C++ 模拟编程:从基础思维到实践落地
本文以C++模拟"银行排队叫号系统"为例,系统讲解模拟编程的实现方法。首先提出"抽象现实-代码映射"的核心思维:1)拆解场景实体与规则;2)用数据结构映射实体;3)按时间轴驱动流程。其次解析三大核心模块:输入初始化、事件驱动循环、结果统计,并给出完整模板代码(含详细注释),采用queue管理顾客队列,vector存储窗口状态,通过事件驱动高效模拟。最后分析时间复杂度为O(n*m),空间复杂度O(n+m),并建议优先队列等优化技巧。该案例展示了C++模拟编程从思维到实现
2025-10-02 09:28:37
1126
原创 CSP-J 组初赛基础知识大全(结合近 5 年真题 )
(二)组合数学(2023 年 2 题,2024 年 1 题)。(三)进制与编码(近 5 年占选择 2-3 题)。(五)输入输出优化(2020-2023 效率题)。(1)01 背包(2024 年考二维转一维优化)。(三)动态规划(2022-2024 比重上升)。(三)图结构(2023-2024 新增重点)。(1)斐波那契递推(2021 年考空间优化)。(2)最大子段和(2023 年完善程序考点)。(二)进阶算法(2023-2024 新增)。(三)数组与字符串(近 5 年全覆盖)。
2025-09-27 11:24:21
1462
原创 CSP-J 组初赛基础知识大全(结合近 5 年真题 )
本文总结了2020-2024年计算机竞赛初赛的核心考点与命题趋势。主要内容包括: 计算机基础知识(15-20%):硬件、进制转换、操作系统等基础概念; C++编程(40%+):语法、STL容器、输入输出优化等重点; 数据结构(50%):线性结构、二叉树、图等高频考点; 算法基础:排序、查找、动态规划等必考算法; 数学知识:数论、组合数学等新增重点。 2025年趋势显示:算法应用和数学融合题增加,记忆性考点减少。建议重点掌握近3年真题,强化算法识别和时间复杂度分析能力。
2025-09-27 11:02:35
1529
原创 经典排序算法深度解析
本文介绍了C++中10种经典排序算法及其实现。包括基础的冒泡排序(O(n²))、选择排序(O(n²))和插入排序(O(n²));改进的希尔排序(O(n^(3/2)))和归并排序(O(nlogn));高效的快速排序(O(nlogn))和堆排序(O(nlogn));以及非比较型的计数排序(O(n+k))、桶排序(O(n+k))和基数排序(O(d(n+b)))。每种算法都详细说明了原理、提供了模板代码和复杂度分析,并指出各自适用场景。实际应用中应根据数据规模、分布特点等选择合适的排序算法。
2025-09-27 10:43:32
1205
原创 P7597 「EZEC-8」猜树 加强版(C++版)
摘要:本文介绍了一种交互式算法,用于确定以1为根的n个节点的有根树结构。通过两种询问方式(查询节点间距离和子树信息),采用广度优先搜索策略从根节点开始逐步确定父子关系。算法核心是利用第二种询问获取每个节点的子树节点,并通过排除法识别直接子节点。C++实现使用队列进行BFS遍历,哈希集合存储子树信息,确保在O(n²)时间复杂度和n次询问内完成树结构的重建,完全满足题目要求的40000次交互限制。最终输出格式为每个节点的父节点列表。
2025-09-26 21:01:50
790
原创 P7597 「EZEC-8」猜树 加强版(python解法)
这篇文章摘要: 题目研究如何通过交互式询问确定一棵以1为根的有根树结构。系统提供两种询问方式:一种是获取两节点间距离,另一种是获取某节点的子树信息。研究者提出了一种基于广度优先搜索(BFS)的算法:从根节点开始,逐步确定每个节点的直接子节点。算法通过维护已确定父节点的集合和子树信息,确保每个节点只被处理一次,从而将总询问次数控制在n次以内(n≤5000),远低于题目要求的40000次限制。文章详细介绍了算法的实现思路和代码逻辑,包括如何处理子树信息、如何识别直接子节点等关键步骤,并分析了算法的时间复杂度为O
2025-09-26 20:57:22
1028
原创 P10944 Going from u to v or from v to u? 山洞探秘:勇气的单向考验
题目要求判断给定的有向图是否为半连通图,即任意两个顶点间至少存在单向路径。通过强连通分量(SCC)缩点技术将原图转化为有向无环图(DAG),若DAG呈线性链状结构(单一起点/终点、无分支且完整遍历所有节点),则判定为半连通图。采用Tarjan算法求SCC,时间复杂度O(n+m),适用于n≤1000、m≤5999的数据范围。该方法高效可靠,是处理有向图可达性问题的经典方案。
2025-09-15 22:52:35
797
原创 P4086 [USACO17DEC] My Cow Ate My Homework S 高效求解最高成绩K值
这篇文章摘要总结了关于奶牛Bessie吃掉部分作业后计算最高成绩的问题。摘要概述了题目要求:从N个问题中找出使剩余问题平均分最高的K值(去掉前K个问题后,再去除最低分计算平均)。关键点包括:预处理后缀和与后缀最小值数组以高效计算各K值对应的平均分,最终输出所有能获得最高分的K值。算法时间复杂度为O(N),适用于大规模数据。
2025-09-13 11:24:47
801
原创 P2741 [USACO4.4] 重叠的图像 Frame Up
本文摘要:题目要求根据重叠后的9×8图像,反推出原始矩形(A-E)从下到上的堆叠顺序。每个矩形用大写字母表示,边宽为1且至少部分可见。算法核心是:1)提取各字母的边界坐标;2)从顶层开始识别,检查其边界的可见性;3)通过DFS递归处理剩余矩形,记录所有可能的堆叠顺序;4)按字典序输出结果。示例输入输出显示正确顺序为EDABC。代码实现了边界检测、可见性验证和深度优先搜索,确保在合理时间内找到所有解。
2025-09-13 11:09:48
547
原创 希尔排序:高效进阶的插入排序
摘要:希尔排序是插入排序的高效改进版,通过可变间隔分组排序提升效率。核心算法先以半数组长度为间隔分组进行插入排序,随后逐步缩小间隔直至1,最终完成整体排序。代码实现包含三个关键步骤:间隔循环控制分组规模、组内插入排序确保局部有序、以及元素移动插入操作。时间复杂度优于普通插入排序,采用折半间隔策略可达O(n^(3/2))。示例代码实现了从大到小的排序输出,通过调整输出循环可改变排序方向。这种分阶段排序方法有效减少了元素移动次数,显著提高了排序性能。
2025-09-13 10:37:55
278
原创 P5250 【深基17.例5】木材仓库
木材仓库管理系统需处理进货和出货操作,要求高效处理最多10^5次操作。原方案使用队列导致O(n²)时间复杂度,存在性能问题。优化方案采用C++ set(红黑树实现),利用其有序性和O(logn)操作特性:进货时用count检查存在性后插入;出货时通过lower_bound定位最近元素,比较前后候选值选择最接近的(距离相等取较小值)。该方案将时间复杂度优化至O(mlogn),完美满足性能需求,正确处理重复插入、精确匹配、最近值选取及空仓库等边界情况,通过各类测试用例验证了正确性。
2025-09-11 23:16:02
714
原创 P2895 [USACO08FEB] Meteor Shower S题解
摘要:贝茜需要在流星雨摧毁牧场前逃离到安全区域。给定M颗流星的撞击位置和时间,每颗流星会摧毁撞击点及其四周格子。贝茜从(0,0)出发,每秒可移动一格,求到达不被摧毁格子的最短时间。使用BFS算法,预处理各格子最早被摧毁时间,搜索时确保到达时间早于摧毁时间。若找到安全格子则输出最短时间,否则返回-1。时间复杂度为O(maxn²),适用于300×300的网格。
2025-09-11 22:57:40
752
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅