- 博客(33)
- 收藏
- 关注
原创 P1049 装箱问题 题解(四种方法)附DP和DFS的对比
这道题可以用DP/DFS去做,看似简单的一道背包DP却藏着多种解法与多种思想,不愧是NOIP!
2025-10-19 23:32:22
892
2
原创 平均分配 gespc++5级2503题解
题目 P11960 要求将 2n 件物品平均分配给小B和小C,使得总收入最大。通过将物品按 b[i]-c[i] 降序排序,前n个选b[i],后n个选c[i]即可得到最优解。需要注意数据范围须用long long和足够大的数组。核心思路是贪心排序,确保高价选择优先。
2025-09-27 11:49:25
1000
原创 GESP C++5级 2025年6月编程2题解:最大公因数
摘要 本文讨论了GESP五级试题P13014关于最大公因数的问题。题目要求处理多个查询,计算数组元素加上增量后的最大公因数。直接暴力解法会导致超时,时间复杂度为O(nq log a_i)。通过数学分析,利用差分数组和gcd性质,将问题转化为计算差分数组的gcd,可将时间复杂度优化为O(n + q log a_i)。关键点在于证明gcd(a+c, b+c) = gcd(a+c, b-a),并处理n=1的特殊情况。最终通过预处理差分数组和特判实现了高效解答。
2025-09-26 23:16:21
740
原创 奇妙数字(GESP五级202412T1)C++题解
题目要求构造包含最多奇妙数字的集合,使得集合中数字乘积是给定正整数n的因子。奇妙数字定义为质数的正整数次幂。解题关键在于将n分解质因数后,对每个质因数的指数进行拆分,使其能表示为最多不同正整数的和。采用等差数列求和公式或二分法计算每个质因数指数能拆分的最大数字个数,最后求和即为答案。算法时间复杂度为O(√n log n)。
2025-09-25 21:48:56
855
原创 P13013 GESP5级202506 编程T1--奖品兑换
这道题目考察了如何高效计算奖品兑换的最大数量。给定手中的课堂券n和作业券m,以及兑换奖品所需的两种不同组合方式(a,b)和(b,a),要求找到最大兑换数量。 关键解题思路: 当a=b时,直接计算min(n,m)/a即可 否则采用二分法,通过检查中间值是否满足条件来缩小范围 检查函数中,先确保基础资源足够,然后计算两种兑换方式的组合可能性 最优解法使用二分查找,时间复杂度为O(log(max(n,m))),能够高效处理大范围输入数据。需要特别注意数据类型转换和边界条件处理。 (注:摘要已控制在256字以内)
2025-09-24 23:00:39
971
原创 单调队列优化dp例题1:超级教主
本文讨论了洛谷上的一道动态规划问题"超级教主",要求计算教主在跳跃收集能量球后能保留的最大能量。文章详细分析了题目特点,指出需要将问题转化为动态规划,并使用单调队列优化来降低时间复杂度。作者先给出了一个直接DP解法但会超时,然后通过改写状态转移方程,引入单调队列优化,最终实现了O(n)时间复杂度的解法。关键点在于正确划分阶段、处理初始条件(r=1)以及合理运用单调队列维护可行决策。该问题展示了如何将看似O(n^2)的DP问题优化为线性复杂度,适合学习动态规划优化技巧。
2025-09-24 20:38:42
767
原创 [MarkDown Editior]数据结构:单调队列(小白也能懂)
本文讲解了队列的基本概念和实现,通过排队打饭的例子形象说明FIFO特性,并给出了C++队列模板代码。文章还结合两道算法题进行实践:B3616队列模板题展示了队列的基本操作,P5318文献查找题则应用队列实现图的BFS遍历。内容从理论到实践,适合初学者理解队列及其应用场景。
2025-09-17 22:46:16
746
2
原创 Luogu P2034 选择数字 题解
题目P2034要求从n个非负整数中选择若干数字,要求不能有超过k个连续数字被选中,求选出的数字最大和。解题思路是将问题转化为删除若干数字,使得相邻被删除数字的编号差不超过k+1,并求最小删除和。通过动态规划结合单调队列优化,可将时间复杂度从O(nk)优化到O(n)。具体实现时维护一个单调递增队列来快速获取最小值,最终答案为总和减去最小删除和。代码已通过洛谷测试。
2025-09-13 00:27:07
1061
1
原创 GDKOI 2009 猴子 题解
摘要:这是一道基于动态规划的香蕉树跳跃问题。给定N棵香蕉树的位置和苹果数量,猴子每次最多跳跃D距离,最多跳M次,要求在不走回头路的情况下获得最多苹果。解题思路是建立二维DP数组dp[i][j],表示第i次跳跃到第j棵树时的最大苹果数。通过枚举前一棵可达的树来更新状态,最终取最大值。时间复杂度为O(M*N^2),适用于N≤2000的数据规模。核心状态转移方程为dp[i][j] = max(dp[i-1][x]) + a[j],其中x为满足距离条件的树。
2025-09-11 23:16:41
737
原创 GESP5级202406真题详解,看不懂来炸我
本文主要包含两部分内容:第一部分是GESP考试的选择题和判断题解析,涵盖C++算法实现、数据结构、排序算法等内容。选择题部分详细解析了斐波那契数列的实现算法、双链表操作、欧几里得算法等题目,判断题则涉及链表特性、排序算法特性等知识点。第二部分是两个编程题解答:第一题"黑白格"通过二维前缀和求解包含至少k个黑格的最小矩形面积;第二题"幸运数字"通过质因数分解判断数字是否恰好有两种不同质因数。文章提供了完整的代码实现和详细的分析思路,帮助考生理解解题方法。
2025-08-31 12:57:39
845
原创 GESP5级2024年03月真题解析
本文是一份编程与算法测试题解析,包含30道选择题、10道判断题和2道编程题。主要内容包括: 选择题解析:涵盖了唯一分解定理、贪心算法、递归阶乘计算、链表操作、算法时间复杂度分析等知识点,每题提供详细解答。 判断题解析:涉及辗转相除法、排序算法复杂度、二分查找条件、贪心算法限制等概念判断。 编程题详解: 成绩排序题:实现多条件排序和并列排名处理,分析比较规则和排序实现方法。 B-Smooth数统计:通过质因数分解判断最大质因子是否满足条件,给出优化解法。 完整代码实现:为两道编程题提供可运行的C+(写不下了)
2025-08-30 20:03:12
956
原创 2023年12月GESP5级C++真题解析,包括选择判断和编程
本文摘要: GESP五级考试包含选择题、判断题和编程题三部分。选择题涉及C++编程知识,如递归与循环效率比较、排序算法实现、链表操作等。判断题考察算法复杂度、排序特性等概念。编程题包括: 小杨的幸运数问题:判断数字是否为幸运数或进行幸运化处理,通过预处理和枚举解决。 烹饪问题:寻找食材组合的最大按位与值,通过排序优化暴力解法。 核心考点包括:算法复杂度分析、递归与循环实现、排序算法、数学运算优化等。解题需掌握基本编程概念和算法优化技巧。
2025-08-29 20:16:54
1063
原创 巧夺大奖(GESP5级23年06月编程T2)题解
【摘要】题目要求在n个时间段内安排n个小游戏,每个游戏有截止时间T[i]和奖励R[i]。解题思路是将游戏按奖励降序排序,然后从后往前为每个游戏寻找空闲时间段。具体步骤:1)定义结构体存储时间和奖励;2)按奖励排序;3)用数组标记时间段占用情况;4)从截止时间向前查找空闲时段并累加奖励。该贪心算法确保高奖励游戏优先安排,时间复杂度O(n^2),适用于n≤500的数据规模。
2025-08-27 22:55:11
828
原创 因数分解(GESP5级202306编程T1)题解
【摘要】题目要求对给定的正整数N进行质因数分解,并按特定格式输出。分解时需从最小质数开始枚举,统计每个质因数的指数。输出格式要求:质因数从小到大排列,用 * 连接且两边留空格;当质因数出现多次时用^;表示指数且不留空格。解题关键是通过枚举2到√N的整数进行试除,处理剩余的大于1的N值,最后按格式输出质因数及其指数。
2025-08-26 22:52:46
522
1
原创 数据结构:排序算法之堆排序Heap Sort
堆排序由Robert W. Floyd和J. Williams于1964年共同提出。该算法基于完全二叉树结构,分为大顶堆和小顶堆两种形式。实现步骤包括:构建大顶堆、交换根节点与末尾元素、调整堆结构(heapify操作)。时间复杂度为O(nlogn),空间复杂度通过迭代优化可降至O(1)。文中详细解释了堆的定义、完全二叉树特性、heapify实现原理,并提供了C++代码示例(包括递归和迭代版本)。作者在B站(ID:鹭鹭2007)分享了相关教学视频和PPT资源。
2025-08-24 21:18:58
778
1
原创 小杨的锻炼(GESP5级2023样题)题解
题目要求计算n个正整数的最小公倍数,即这些数下一次同时出现的天数。解题思路是两两计算最小公倍数:先用辗转相除法求出最大公约数,再用乘积除以最大公约数得到最小公倍数。需要注意数据范围可能很大,必须使用long long类型。输入n个数后,依次计算当前结果与下一个数的最小公倍数,最终结果即为所有数的最小公倍数。关键点在于正确实现最大公约数函数和注意数据类型范围。
2025-08-24 20:23:38
603
原创 数据结构:排序算法之基数排序Radix Sort
基数排序算法解析:1887年提出的非比较排序算法,通过逐位分类实现排序。核心步骤包括:1)按个位到最高位依次分类;2)使用0-9桶存储元素;3)每轮分类后合并桶。文中以8个4位数为例详细演示了分类过程,并给出C++实现代码。时间复杂度为O(nk)(k为最大位数),空间复杂度O(n)。特点:适用于位数较少的整数排序,效率与数据位数直接相关。算法通过多轮稳定的低位优先排序,最终实现整体有序。
2025-07-29 10:58:00
995
原创 数据结构:排序算法之计数排序Counting Sort
计数排序是一种非比较型整数排序算法,由Harold H. Seward于1954年提出。其核心思想是通过统计元素出现次数来实现排序,具体分为三个步骤:1)确定数据范围(最大值和最小值);2)统计各元素出现次数;3)根据统计结果重建有序数组。该算法时间复杂度为O(n+k),空间复杂度为O(k),其中k为数据范围大小。计数排序效率高但存在内存限制,当数据范围过大时会造成空间浪费。文中通过数组示例详细演示了排序过程,并提供了C++代码实现,指出该算法适用于数据范围较小且密集的情况。
2025-07-28 19:04:20
854
原创 数据结构:排序算法之归并排序Merge Sort
本文详细介绍了归并排序算法。首先澄清了冒泡排序和归并排序的提出者分别是查尔斯·安东尼·理查德·霍尔和冯·诺伊曼,并纠正了"归并"的正确读音。文章通过示例数组arr[8]={2,3,7,4,1,8,6,5}详细展示了归并排序的分治过程:将数组递归分成两半排序,再合并有序子数组。给出了完整的C++代码实现,包括merge和mergesort函数。复杂度分析指出归并排序的时间复杂度为O(nlogn),空间复杂度为O(n),且最好最坏情况相同。文章包含大量代码和详细排序过程说明,总计4029字。
2025-07-27 22:21:15
767
1
原创 数据结构:排序算法之快速排序Quick Sort
快速排序是一种基于分治思想的高效排序算法,通过选取基准值(pivot)将数组划分为两个子数组递归排序。算法过程包括:选取基准值、分区(左小右大)、递归处理子数组。时间复杂度平均为O(nlogn),最坏情况(已排序数组)退化为O(n^2)。空间复杂度主要取决于递归深度,平均O(logn),最坏O(n)。文中通过具体数组示例详细演示了排序过程,并提供了C++实现代码,包含分区函数和递归调用逻辑。该算法在大多数情况下表现优异,但对已排序数组效率较低。
2025-07-25 23:06:36
1033
3
原创 数据结构:排序算法之选择排序Selection Sort
选择排序是一种直观的排序算法,其工作原理是每次从未排序部分选出最小值放到已排序部分的末尾。算法通过n-1轮选择完成排序,每轮在剩余元素中寻找最小值并交换位置。虽然实现简单,但时间复杂度始终为O(n²),空间复杂度为O(1)。文中详细演示了排序过程,并提供了C++实现代码。该算法模拟了人工排序的思维方式,但效率较低,适用于小规模数据排序。
2025-07-25 17:11:00
282
原创 数据结构:排序算法之直接插入排序Insertion Sort
插入排序是一种基于比较的简单排序算法,通过将未排序元素逐个插入到已排序部分的正确位置来实现排序。文章详细解析了插入排序的原理:从第二个元素开始,每个元素与其左侧元素比较并交换,直到找到合适位置。通过数组{2,1,4,5,3}的示例展示了具体排序过程。文中还分析了算法的时间复杂度:最好情况(已排序数组)为O(n),最坏情况(逆序数组)为O(n²),平均复杂度O(n²)。最后提供了C++实现代码,展示了如何通过临时变量优化交换操作,并指出其空间复杂度为O(1)。
2025-07-25 15:56:54
574
原创 数据结构:排序算法之冒泡排序Bubble Sort
摘要:冒泡排序由冯·诺伊曼提出,通过相邻元素比较交换将最小元素"上浮"实现排序。文章详细演示了排序过程,分析了最好(O(n))和最坏(O(n²))时间复杂度,强调优化的重要性。提供了C++实现代码,包含提前终止优化,并指出其空间复杂度为O(1)。该算法适合教学但效率较低,适用于小规模数据排序。
2025-07-24 23:59:29
1004
原创 计算表达式的值题目
一位数:https://www.luogu.com.cn/problem/U579076。多位数:https://www.luogu.com.cn/problem/U579094。结合体:https://www.luogu.com.cn/problem/U579104。
2025-07-10 17:55:05
233
原创 宝箱(GESP4级第六次认证编程题)题解
小杨可以选择一些宝箱放入背包并带走,但是小杨的背包比较特殊,假设小杨选择的宝箱中最大价值为 x,最小价值为 y,小杨需要保证 x−y≤k,否则小杨的背包会损坏。已知n个宝箱的价值和小杨的背包,要求最大-最小价值≤k,往背包里装价值尽可能多的宝箱,求最大价值(前提是不能损坏背包)。在背包不损坏的情况下,小杨可以拿走两个价值为 2 的宝箱和一个价值为 3 的宝箱。对于全部数据,保证有 1≤n≤1000,0≤k≤1000,1≤ai≤1000。小杨发现了 n 个宝箱,其中第 i 个宝箱的价值是 ai。
2025-03-02 18:28:44
692
1
原创 做题(GESP4级第五次认证编程题)题解
小杨同学现在找到了一个题库,一共有 n 套题单,每一套题单中有一定数量的题目。但是他十分挑剔,每套题单他只会使用一次,每一天也只能使用一套题单里的题目,之后那套题单就会弃之不用。这里要特别注意,不能输出day,而要输出day-1,因为最后一次day++说明day进入了不合法的状态,减掉就好了,代码就是cout<<day-1;小杨同学为了提高自己的实力制定了做题计划,在第 k 天时,他必须要完成 k 道题,否则他就会偷懒。对全部的测试数据,保证 1≤n≤106,1≤ai≤109。输出一行一个整数表示答案。
2025-03-02 17:52:05
646
原创 图像压缩(GESP4级第二次认证编程题)题解
其他灰阶转换到最近的 16 种灰阶之一,将某个点的灰阶值(灰度,而非次数)与 16 种灰阶中的一种相减,绝对值最小即为最近,如果绝对值相等,则编号较小的灰阶更近。压缩规则为:统计出每种灰阶的数量,取数量最多的前 16 种灰阶(如某种灰阶的数量与另外一种灰阶的数量相同,则以灰阶值从小到大为序),分别编号。4 其他灰阶分别与十六种灰阶(灰度)相减,绝对值最小的那一种灰阶,原来的灰阶就要转换成它(顺便把第五步也完成了)其他灰阶分别与十六种灰阶(灰度)相减,绝对值最小的那一种灰阶,原来的灰阶就要转换成它。
2025-03-02 11:52:24
1136
原创 区间排序(GESP4级第七次认证编程题)题解
小杨计划对序列进行多次升序排序,每次升序排序小杨会选择一个区间 [l,r](l≤r)并对区间内所有数字,即进行升序 al,al+1,…之后 q 行,每行包含两个正整数 l,r,代表将区间 [li,ri] 内所有数字进行升序排序。对于全部的测试数据,保证 1≤n,ai,q≤100,1≤li≤ri≤n。已知长度为n的数列a,进行q次排序,范围是(li,ji),求排序后的a。输出一行包含 n 个正整数,代表多次升序排序后的序列。很简单,只需把a进行q次排序即可,并没有要求别的。
2025-02-16 18:51:39
541
原创 Recaman(GESP4级第八次认证编程题)题解
第一项为1,之后第k项的前一项减去k本身若是正整数且在数组中从未出现,则把第k项赋值为它,否则赋值为a[k-1]+k。小杨想知道 Recamán 数列的前 n 项从小到大排序后的结果。手动计算非常困难,小杨希望你能帮他解决这个问题。一行,n 个空格分隔的整数,表示 Recamán 数列的前 n 项从小到大排序后的结果。a1,a2,a3,a4,a5 从小到大排序的结果为 1,2,3,6,7。对于所有数据点,保证 1≤n≤3000。第一行,一个正整数 n。把它的前n项从小到大排序。
2025-02-13 11:38:32
704
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅