- 博客(37)
- 收藏
- 关注
原创 搜索刷题1-八皇后
当一个皇后放置在棋盘上时,它将占据一个列位置、一个主对角线位置和一个副对角线位置,这些位置随后在递归调用中被标记为不可用。一旦所有的皇后都成功放置,就找到了一个解,并且递归开始回溯,撤销皇后的位置和相关的标记,继续尝试新的位置。程序会打印出前三个找到的解,并在程序最后输出总的解的数量。这道题用深度优先搜索算法(DFS)来寻找所有可能的解决方案。题目的要求是任意两个皇后都不能处于同一行、同一列或同一对角线上。本题可以定义三个数组b1、b2、b3。
2024-03-14 17:08:17
347
1
原创 贪心刷题4-小A的糖果
要解决这个问题,我们可以遍历糖果盒,每次检查相邻盒子的糖果数之和是否超过给定的 x。如果是,我们就从当前盒子中减去多余的糖果数量以确保总和不超过 x。
2024-03-07 19:05:50
406
原创 贪心刷题3-合并果子
这道题的关键在于每次选择合并时都要选择最小的两堆果子来合并,从而保证每次合并的代价最小,累计的总代价也最小。可以使用两个数组,一个存储输入的果子数目(a1),另一个用于存储中间合并过程中生成的新堆(a2)。进行n-1次操作,每次从a1和a2指向的元素中选取两个最小的进行合并,更新指针位置,并将合并后的新重量加入到a2数组,同时更新总体力消耗sum。图1 节选自《 深入浅出。初始化两个指针,分别指向a1和a2的起始位置,用于在后续操作中选择最小的元素。输入果子的种类数n,并为a1数组赋予相应的果子数目。
2024-03-06 11:20:42
544
原创 贪心刷题2
按照接水时间对人进行排序,这样能确保每个人的等待时间被最小化。因为如果一个接水时间长的人排在前面,他会增加后面所有人的等待时间;而接水时间短的人排在前面,则他对后面人的等待时间影响较小。这样,每个人的接水时间对于等待时间的贡献是累积的,而不需要为每个人单独累加前面所有人的接水时间。这是一种更有效率的计算总等待时间的方法。优先选择结束时间最早的活动,以便为后续活动留出更多的空间。为此,所有活动首先根据它们的结束时间进行排序。计算总等待时间时,我们需要计算每个人在他之前所有人接水所耗费时间的总和。
2024-03-05 11:31:49
968
原创 贪心刷题1-部分背包
目标是通过完全或部分地拿取这些金币堆,使得背包中的金币价值最大化。代码采用贪心算法,通过按价值与重量比降序排序金币堆,然后迭代地将它们添加到背包中,直到背包装满或没有更多的金币堆可考虑。这道题是部分背包,如果金币不能完整的放入是可以分割的。题目中有若干堆金币,每堆金币有一定的重量(《深入浅出程序设计竞赛(基础篇)》),以及一个最大承重为。
2024-03-04 16:08:06
493
原创 排序刷题12 -双向排序
最近开始刷蓝桥杯的题目了,本小白表示有些题目好难阿,研究生组哭晕(((φ(◎ロ◎;这道题自己做只能达到60分,本小白表示100分优化不会惹,先拿点分后面再看别人的思路吧。想到了用sort()函数解决,发现也就60分,超时了。不过没关系能拿一点是一点。(hahahaha~,心态有点好)
2024-03-03 15:08:18
357
原创 暴力枚举8-火柴棒等式
可以通过编程来枚举所有可能的 A、B、和 C 的组合,并检查每一组组合是否满足使用了 n根火柴棍的条件。(需要注意的是,加号与等号各自需要两根火柴棍,那么数字的火柴总数应该为n-4)
2024-02-29 13:59:10
688
原创 暴力枚举刷题7-涂国旗
要解决这个问题,我们可以使用暴力枚举方法来找到涂色最少的方案。基本思路是枚举白色区域和蓝色区域的边界行,然后计算将布匹涂成合法国旗所需改变的最少格数。
2024-02-27 10:38:17
427
原创 暴力枚举刷题6-三连击
解题思路:这道题和上一篇一样,考察next_permutation函数的使用。的所有排列,然后基于这些排列构建三位数,检查它们是否符合输入的比例条件。参考书目:《深入浅出程序设计竞赛(基础篇)》
2024-02-23 10:27:58
304
原创 暴力枚举刷题5-全排列问题
,使得原地生成给定序列的下一个排列。如果序列已经处于最大可能的排列(即没有下一个更大的排列),则该函数返回。这道题主要是考察next_permutation函数的使用,这个函数可以应用于数组或容器(如。并将序列重置为最小可能的排列(即升序排列),否则返回。,这是这组元素的最大排列。
2024-02-22 10:39:10
685
原创 暴力枚举刷题4
的所有子集,直到找到r的子集,按从小到大输出。解题思路很好理解,问题是怎么用位运算来枚举数值a的所有子集。的集合的所有可能的子集,从最大的全集(所有元素都存在)到空集(没有元素)。如果等于,那么就以特定的格式输出该子集中元素的索引(逆序并调整为从。:这是位运算中的左移操作,意味着数字 1 在二进制形式下向左移动。用来记录当前子集中所有元素的索引,而。可以看作是集合中一个元素的存在。:外层循环的每次迭代结束时,通过。则表示当前子集中元素的数量。代表集合中元素的位置索引。的集合的全集,其中每个。
2024-02-21 11:20:35
535
原创 暴力枚举刷题3
函数来计算一个数的二进制表示中1的个数(即集合中元素的个数)。个元素的子集的元素和是否为质数。的所有子集,然后检查每个恰好包含。通过位运算来枚举数组。
2024-02-20 15:31:02
295
原创 暴力枚举刷题2
的最大值为 5000,且配料的数量固定为 10 种。时间复杂度 O(3^10),空间复杂度 O(1),对于这道题来说是可行的。若n较大的情况下,不建议这种方法。这道题可以用暴力枚举的方法解决,用10层for循环,再if判断就能找到所有符合的情况。
2024-02-16 13:18:24
524
原创 暴力枚举刷题1
在一个 n×m 的矩形上,计算所有可能的长方形(包括正方形)的数量,可以通过计算所有可能的顶点对来完成。:在长度为 n 的矩形,有 n+1 个水平的格线。从这n+1 个格线中选择两个不同的格线作为长方形的上下边界,可以有 C(n+1,2) 种选择方法,这是因为顶点对的选择是组合而不是排列(顺序不重要)。选择两个不同的垂直格线作为长方形的左右边界,可以有 C(m+1,2) 种选择方法。:要形成一个长方形,我们需要同时选择水平和垂直坐标,所以这两种选择的组合数是乘积形式的:C(n+1,2)×C(m+1,2)。
2024-02-15 15:14:57
856
原创 排序刷题11
解题思路:这道题重点在于怎么把数字拼接,得到最大的值。这里可以用to_string()函数,将数字先转换为字符再拼接,最后得到拼接的最大值。ps:需要考虑两个相邻字符的前后两种拼接方式,ab,ba。
2024-02-12 12:03:09
296
原创 排序刷题10
这道题使用自定义的排序方法并用sort()函数就可以实现。需要注意的是输入生日的顺序也要考虑进去,不然得不到满分。,首先根据年份、月份、日期从小到大进行排序,以确保年龄从大到小的顺序;对于生日完全相同的情况,通过比较输入顺序(来存储每个同学的姓名、出生年月日以及输入顺序。使用自定义的比较函数。字段)的逆序来保证输入顺序靠后的同学在排序后排在前面。
2024-02-10 15:57:53
330
原创 排序刷题9
今天是除夕夜,祝大家除夕快乐,新的一年继续和大家陪伴刷题,祝大家龙年大吉,万事顺意,也祝今年找工作的伙伴们,顺利找到心仪的岗位。函数和自定义比较函数对数组进行排序,根据每个点的z值从小到大排序。然后依次算欧几里得距离,求和就可以解决啦。:这道题其实还满简单的,用结构体+排序+数学。ps:记得保留三位小数喔,不然系统过不去~
2024-02-09 13:50:44
1227
原创 排序刷题7
数组,确保从1到n-1的每个差值都已经出现过。如果所有差值都出现过,则数组符合“欢乐的跳”的定义;中的每对连续元素,计算它们之间的差的绝对值,并检查这个差值是否在1到n-1的范围内。:根据数组是否符合“欢乐的跳”,输出相应的结果。来存储输入的整数,和一个布尔数组。:通过循环从标准输入读取数组的大小。来跟踪哪些差的绝对值已经出现过。数组中对应位置标记为。
2024-02-07 21:52:38
283
1
原创 排序刷题5
解题思路:这道题使用排序的思想就可以解决,这道题的目标是奶牛在能够够到书架顶的前提下,使塔中奶牛的数目尽可能的少。可以用STL中的sort函数对奶牛进行排序(注:从高到低排序,可以更好的减少奶牛数目),当满足够到书架顶B时,输出当前的奶牛数目。
2024-02-05 13:14:54
694
1
原创 排序刷题4
这道题比较简单,只需要读取候选人的数量和每个候选人的票数,然后根据票数找到票数最多的候选人。可以用STL自带的sort函数完成。(这里需要特别处理的是,票数是字符串形式的)
2024-02-02 11:15:26
365
原创 排序刷题3
解题思路:使用STL进行排序,用一个结构体来存储学生的总分,id号以及三课分别的成绩。再构建一个bool类型的比较函数,目的是比较三种情况时的排名(总分高优先,其次总分一样时看语文成绩,最后都一样看学号大小,小的在前)。
2024-02-01 11:12:02
659
1
原创 排序刷题2
这道题的解题方法有很多,由于随机数的范围是 1 到 1000,范围比较小。同时快排和二分查找也能用,二分查找之前刷了不少题,就不写这部分的代码了。下面主要用计数排序和快排的思想来完成。对于本题,可以创建一个大小为 1001 的数组(假设数组下标从 1 开始,到 1000),用于计数每个数字出现的次数。然后,遍历计数数组,输出非零计数的索引(即原数组中的唯一数字)。这里用STL库中的sort()函数来完成。
2024-01-30 14:00:43
246
1
原创 计数排序刷题1
设置一个和候选者人数n等大的投票箱,所有的投票人m依次排队投票给候选者,这样每个投票箱都是该候选者的票数,再依次把箱子里的票输出即可。,因为这种方法的时间复杂度为O(n+m),与人数有关,太大时间复杂度过高,得不偿失。这种计数排序的思想比较适合排序数字不大的情况。
2024-01-24 12:06:30
406
1
原创 排序刷题1
图1 选自《深入浅出程序设计竞赛--基础篇》题目来源: 《深入浅出程序设计竞赛--基础篇》------汪楚奇 P131 - 例9.2。
2024-01-22 13:54:27
402
原创 二分答案刷题4
注意的是,low设置为数组中的最大值,high设置为整个数组的和。(因为分段中最大不会超过总的和,最小也是分段中的元素最大值。二分答案求解的过程中,最重要的是判断条件,判断条件想好就迎刃而解了。确定一个bool类型,用来检查是否能将数组分成不超过。这道题又是一道求最值的问题,求每段和的最大值最小,可以用二分答案求解。PS:这道题我只能做到100分,没有完全accept。个连续的段,使得每个段的和不超过 最小的每段和的最大值。
2024-01-18 11:19:40
783
1
原创 二分答案刷题3
各位小伙伴们,如果有幸可以被你看到我的文章,是我的荣幸。近期我的小目标是争取一天分享一道题题解,当然可能有时候比较忙啦,尽量吧。题目的思路都是个人看法,不喜勿闷喔。新的一年希望大家都能找到好工作,过上自己满意的生活,希望我今年也能顺利找到好的实习、好的工作啦。废话不多说,上题目。
2024-01-16 11:37:00
495
1
原创 二分查找刷题5
有没有人和我一样不会算利率的。这道题用二分查找的思想模拟还款过程,就可以计算出来了。需要注意的是这道题在计算还款过程中,利率通常是按期(本例中是按月)累计的。给定月利率时,每个月的余额会增加对应的利息,然后减去当月的还款额。,下个月在此基础上积累。
2024-01-15 12:09:52
548
原创 二分答案刷题2
二分答案适合求解最值的问题,并且需要满足单调性的思想,从这道题可以看出,若l是把这些木头切割成k段的最大值,则增加l的值,则切割不到k段,减少l的值,不满足其最大值,符合单调性。需要注意的是,设置二分搜索的初始边界时,left 设置为 1,是为了避免除0操作。然后while循环调用。PS:目前对博客的创作还在摸索中,后面若遇到同类型的题目,我尽量放一块写。现在就暂时分开啦,小心食用,不喜勿喷喔。这道题和之前发表过的一篇文章的解题思路是一样的。函数来确定是否可以切割出足够的木材段。以寻找更长的可能长度;
2024-01-12 11:46:51
661
1
原创 二分查找刷题4
1、检查边界:如果循环结束时,可能存在越界的情况,需要判断如果 left 指向的是数组之外的元素,则选择数组中的最后一个元素。这道题可以用二分查找解决。这题的目的是找到与学生的估分差距最小的学校并计算其总的满意度值,用二分查找可以降低一定查找速度。3、否则,若left>1,需要考虑left-1和left之间那个比较小,选择最小的那个。2、如果left 是第一个元素,则直接用left相减。2、用二分查找找到大于或者等于学生估分中差距最小的学校预计分数线mid。4、遍历完所有的学生分数,并计算累计的最小值。
2024-01-11 12:04:59
670
1
原创 二分查找刷题3---一元三次方程求解
我们可以直接遍历[-100, 100] 范围内的每个可能的浮点数值,并检查哪些值使得方程的结果接近于零。由于题目要求根与根之间的差的绝对值至少为 1,所以我们可以选一个较小的步长(例如,0.01)在这个范围内进行遍历,每次计算方程在该点的值,如果值接近于零,则认为找到了一个根。区间内存在根,我们可以在这个区间内进行更精细的搜索(例如,使用二分搜索)以找到根的近似位置。使用二分查找是为了降低时间复杂度,其实也就是遍历根在[-100,100]之间用二分搜索找值。--基础篇》------汪楚奇P183。
2024-01-10 12:17:06
393
原创 二分答案刷题1
题目来源: 1、 [COCI 2011/2012 #5] EKO / 砍树 - 洛谷 2、《深入浅出程序设计竞赛--基础篇》------汪楚奇P179做题思路:题目的需求是求最大的整数高度h,使得能够收集到的长度为m的木材。是一个求最值的问题,若通过枚举的方式求,时间复杂度则会非常高,本题的思路是用二分答案求解,将一个求最值的问题转换为判定问题,通过判定条件来验证某个候选答案是否可行。二分答案的过程大致如下:1、确定搜索范
2024-01-09 21:19:35
496
原创 二分查找刷题2
一开始做这道题的时候,没有认真审题(自罚三杯),我以为只是简单的相减用二分查找检索到就好了。其实不然,第一,题目没有明确说明它是一个顺序列表,第二元素是否相同,找到的元素若有多个时应该要cout++,第三真的要认真审题,我以为的是target= n-c,找target就好了。刷题的书目在 上一篇文章里提到过了,大家可以看下上一篇的文章,暂时刷题参考的书是这些,如果有更换,会及时说明。本博客分享的刷题思路仅供参考,俗话说“一千个人眼中有一千个哈姆雷特”,或许大家有更好的想法,大家就当看看就好了。
2024-01-07 17:40:43
414
原创 二分查找刷题1
此题是标准的二分查找求解,需要注意的是,当找到的目标值存在相同的元素时,要进行特殊处理,题目的要求是找到相同元素中的第一个元素的下标位置,所以找到目标函数时还要判断其是否为首位元素,用right = mid - 1;图3 节选自《深入浅出程序设计竞赛--基础篇》-二分查找步骤。下面的示例是书上的代码,这个代码的缺点是没有考虑到存在相同元素的情况,需要返回的是一个出现的位置。《深入浅出程序设计竞赛--基础篇》------汪楚奇。《图解算法》---------袁国忠译。参考书目:《大话数据结构》------
2024-01-04 11:59:59
457
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人