- 博客(8)
- 收藏
- 关注
原创 《骗 分 导 论》
任何蒟蒻必须经过大量的刷题练习才能成为大牛乃至于神牛 ”\color{steelblue}\text{“ 任何蒟蒻必须经过大量的刷题练习才能成为大牛乃至于神牛 ”}任何蒟蒻必须经过大量的刷题练习才能成为大牛乃至于神牛这就是著名的 lzn 定理。然而,我们这些蒟蒻们,没有经过那么多历练,却要和大牛们同场竞技,我们该怎么以弱胜强呢?骗分\large\color{cadetblue}\text{骗分}骗分那么,骗分是什么呢?
2025-08-12 07:50:38
2174
原创 数据结构 栈
摘要 栈是一种后进先出(LIFO)的线性数据结构,仅允许在栈顶进行插入(push)和删除(pop)操作。其核心特性包括:仅操作栈顶、不支持随机访问、默认基于deque实现。栈的提出源于1950年代鲍尔团队对逆波兰表达式计算和函数调用机制的研究,现广泛应用于程序调用栈、表达式求值、括号匹配等场景。C++中可通过STL的std::stack或手动数组实现栈操作,基本功能包括压栈、弹栈、判空等。例题B3758展示了栈在括号匹配中的典型应用——通过栈统计未匹配括号数量,动态补全成合法序列。栈的高效性使其成为算法和系
2025-08-10 20:20:15
2065
原创 B4016 树的直径 c++题解
当存储边(u,v)时,需要在u的邻接表中添加v,同时在v的邻接表中添加u,这样才能完整表示无向边。步骤2:从 begin 出发再次DFS,找到最远节点 end,此时 begin 到 end 的路径即为直径。代码通过两次DFS求解树的直径,每次DFS均完整遍历所有节点(共 n 个),时间复杂度为 O(n)。步骤1:从任意节点(如节点1)出发,通过DFS找到最远节点 begin(必为直径的一个端点)。总时间复杂度为 O(n) + O(n) = O(n),即线性复杂度,效率最优。
2025-08-08 11:51:22
962
原创 P1002 [NOIP 2002 普及组] 过河卒 c++题解
题目摘要:NOIP2002普及组"过河卒"问题 题目要求计算棋盘上卒从起点(0,0)到终点(n,m)的路径数,卒只能向右或向下移动,且需避开马的控制点(包括马的位置及其8个跳跃点)。 方法对比: 动态规划(最优解): 使用二维数组dp记录路径数 状态转移:dp[i][j] = dp[i-1][j] + dp[i][j-1] 复杂度:O(nm),空间O(nm) 记忆化搜索: 递归实现,配合记忆化数组 复杂度与DP相同但常数更大 BFS: 适合路径追踪但效率低 复杂度:O(2^(n+m)),
2025-08-06 21:21:22
2142
原创 P1014 [NOIP 1999 普及组] Cantor 表 c++题解
本文介绍了NOIP 1999普及组题目"Cantor表"的解题方法。题目要求按照Z字形顺序输出有理数表中的第N项。解题核心是采用分组模拟法:首先确定目标数所在的斜行k,然后根据斜行奇偶性决定移动方向(奇数行向左上,偶数行向右下),最终通过数学计算确定分子分母。算法时间复杂度为O(√N),适用于大范围数据。文章提供了完整的C++代码实现,并附有测试样例和相关题目推荐。该解法通过数学推导优化了传统模拟方法,避免全表遍历,提高了效率。
2025-08-02 17:59:01
905
原创 贪心算法 (Greedy Algorithm)
贪心算法是一种通过局部最优选择逐步逼近全局最优解的算法策略。其核心思想是在每个决策点选择当前最优的选项,通过累积局部最优解来期望获得全局最优解。贪心算法适用于具有贪心选择性质和最优子结构的问题,如合并果子、最小生成树等经典案例。典型应用包括霍夫曼编码、Dijkstra最短路径等,但它不保证所有问题都能得到全局最优解。贪心算法与动态规划的区别在于它不做回溯,仅考虑当前最优选择。在解决实际问题时,需要将问题抽象为数学模型并选择合适的数据结构(如优先队列)来实现高效求解。
2025-07-21 15:31:15
1134
原创 洛谷B4222 [常州市赛 2023] 积木 c++题解
题目描述:小X在地上玩积木,每块积木都是1×1×1的正方体。,每个格子中堆着若干块积木,第i行第j列有h_{i,j}块积木。通过 大矩形 - 上方 - 左侧 + 左上角 得到目标区域D的和。sum[i-mid][j-mid]:左上角小矩形(A)sum[i][j]:整个大矩形和(A+B+C+D)sum[i-mid][j]:上方矩形和(A+B)sum[i][j-mid]:左侧矩形和(A+C)的积木,使得剩下的积木组成一个。
2025-07-20 15:05:59
948
原创 洛谷P3717 [AHOI2017初中组] cover 题解 c++
该题解介绍了洛谷P3717 [AHOI2017初中组] cover问题的C++解法。题目要求计算在n×n网格中被m个探测器覆盖的区域,每个探测器能覆盖半径为r的圆形范围。题解使用二维数组标记被覆盖的点,通过遍历每个探测器周围的正方形区域,计算欧氏距离判断是否在覆盖范围内。最后统计被标记的点的数量。代码使用了模拟和枚举的方法,时间复杂度为O(m*r²)。适合入门级选手练习网格覆盖和距离计算问题。
2025-07-15 21:23:36
407
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅