自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

月半流苏的博客

已复出as ACMer

  • 博客(106)
  • 收藏
  • 关注

原创 Problem: Exercise - 03 Minimum Common Value

题目要求在两个已排序的数组中找出第一个相同的元素。通过双指针方法,依次比较数组元素:当a[i]<b[j]时i右移,相等时输出结果,否则j右移。若遍历完未找到相同元素则输出-1。代码处理了边界情况,确保正确性。时间复杂度为O(m+n)。

2025-11-25 10:49:38 208

原创 Problem: Exercise - 04 Majority Element

题目要求找出出现次数超过⌊n/2⌋次的众数。分析发现,排序后数组的中位数必定是所求众数。因此,只需将输入数组排序后直接输出中间位置的元素即可。这种方法避免了复杂的计数过程,时间复杂度主要由排序决定,为O(nlogn)。C++代码实现简单,先读取输入数组,排序后输出中间元素。

2025-11-25 10:35:58 299

原创 Problem: Exercise -14 Quick sort-Test

本文介绍了一道快速排序模板题的解法。题目要求对包含重复元素的数组进行从大到小排序。关键点在于处理重复元素时需要在比较时取等号,并注意排序方向。作者提供了C++实现代码,采用分治思想,通过递归调用完成排序。代码中特别处理了边界条件,确保递归终止,并正确交换元素位置。最终输出排序后的数组,时间复杂度为O(nlogn)。

2025-11-25 10:20:15 140

原创 Problem: Exercise - 20 Fibonacci Number

摘要:本文介绍了一个计算斐波那契数列第n项的问题。题目给出n的范围(n≤30),建议直接使用暴力解法。提供的C++代码实现了斐波那契数列的计算,采用迭代方法从f[0]和f[1]开始逐步计算到f[n],最后输出结果。该解法时间复杂度为O(n),空间复杂度为O(n),适用于给定的小规模数据范围。

2025-11-24 20:42:57 147

原创 Problem: lab-week10-exercise02 Building a Fiber Network

本文展示了如何使用Kruskal算法解决最小生成树问题的C++实现。代码首先读取节点数n和边数m,然后对边按权值排序,通过并查集逐步合并节点来构建最小生成树。若无法形成连通图(边数不足或存在孤立节点)则输出"IMPOSSIBLE",否则输出最小生成树的总边权和。实现包含输入处理、边排序、并查集操作和连通性检查等关键步骤,时间复杂度主要由排序决定,为O(mlogm)。

2025-11-14 14:24:19 388

原创 Problem: lab-week10-exercise01 Activity Selection with Rest Time

这篇文章介绍了一个贪心算法问题,要求选择尽可能多的不重叠活动区间。摘要: 这是一个区间调度问题,采用贪心算法思想,按照活动结束时间从早到晚排序。通过逐个选择结束时间最早且不与已选活动重叠的活动,可获得最大活动数量。C++代码实现中,首先对结构体数组按结束时间排序,然后用变量t记录当前时间点,每次选择开始时间≥t的活动,并更新t为该活动结束时间+r(考虑间隔)。这种贪心策略保证了最优解。时间复杂度主要来自排序的O(nlogn)。

2025-11-14 13:20:52 187

原创 Problem: lab-week9-exercise03 Partition Into Two Equal Sum Subsets

本文讨论了一个与背包问题类似的子集和问题,要求判断是否存在子集的和等于总和的一半。首先检查总和是否为奇数直接排除可能,然后使用动态规划求解。代码使用布尔数组记录可达的和值,最终验证目标值是否可达。此解法有效判断了是否存在满足条件的子集。

2025-11-07 10:19:41 237

原创 Problem: lab-week9-exercise02 Longest Common Subsequence

本文解决最长公共子序列(LCS)问题。给定两个字符串,使用动态规划方法计算它们的最长公共子序列长度。通过构建二维数组f[i][j],当字符匹配时从f[i-1][j-1]转移并加1;不匹配时取f[i-1][j]和f[i][j-1]中的较大值。最终f[l1][l2]即为结果,时间复杂度O(n^2)。代码简洁高效地实现了该算法。

2025-11-07 09:57:18 171

原创 Problem: lab-week9-exercise01 Subset Sum(Knapsack Problem)

本文实现了一个动态规划算法,用于判断能否从给定数字中选取若干个数使其和等于目标值。算法使用布尔数组f标记每个可能的和值,通过双重循环(外层遍历数字,内层逆向遍历和值)避免重复使用数字。输入数字排序后,逐步更新和值的可能性,最后检查目标值是否可达。若可达输出"YES",否则输出"NO"。该方法高效地解决了0-1背包问题的变种。

2025-11-07 09:35:46 238

原创 Problem: Exercise - 01 Binary Search

本文介绍了一个使用二分查找算法解决有序数组搜索问题的C++实现。代码首先读取数组长度n和有序数组元素,然后输入目标值target,通过递归实现二分查找来定位目标值在数组中的位置。若找到则返回索引,否则返回-1。算法时间复杂度为O(log n),有效提升了搜索效率。

2025-11-01 09:24:39 191

原创 Problem: lab-week6-exercise02 Relative Ranks

本题要求对选手成绩进行排名并输出,前3名分别显示为金、银、铜牌。通过结构体存储选手编号、分数和排名,先按分数降序排序确定排名,再按编号升序排序恢复原顺序输出。关键点在于两次排序处理:第一次根据分数确定排名,第二次恢复原始顺序。对于排名前3的选手,输出对应的奖牌名称,其余输出数字排名。

2025-10-17 12:43:44 306

原创 Problem: lab-week6-exercise01 Last Stone Weight

这篇文章介绍了一个关于二叉堆/优先队列的算法问题。作者使用C++的priority_queue容器来模拟石子合并过程:每次取出最大的两个数相减,若结果不为0则重新放入队列,直到只剩一个元素或队列为空。这种解法避免了手写堆的实现,提供了简洁高效的代码方案。时间复杂度主要取决于优先队列操作,适用于处理类似堆顶元素动态更新的问题。

2025-10-17 12:26:13 212

原创 Problem: lab-week4- exercise03 Counting sort

本文介绍了计数排序算法的实现,分别提供了Python和C++版本的代码。该算法首先确定数组元素的最大值和最小值,然后创建一个计数数组统计每个元素出现的次数,最后按顺序输出排序结果。两种语言实现逻辑相同,都通过遍历元素统计频次后有序输出,时间复杂度为O(n+k),其中n是元素个数,k是数据范围。

2025-10-01 09:58:04 495

原创 Algorithm: Counting Sort 计数排序

摘要:本文介绍了计数排序算法的实现,包含伪代码说明和Python、C++两种编程语言的代码示例。该算法通过统计元素出现次数进行排序,适用于整数数据。Python版本处理了空数组情况并计算值范围,C++版本则通过循环统计元素频率。两种实现都展示了计数排序的核心思想:统计元素分布,然后根据统计信息重新排列数组。

2025-10-01 09:32:21 189

原创 Problem: lab-week4- exercise02 Quick sort

本文介绍了快速排序算法的实现,提供了Python和C++两种语言的代码示例。快速排序通过选取基准值(pivot)将数组分为两部分,递归排序子数组。Python版本使用函数参数传递数组和索引,C++版本则直接操作全局数组。两种实现都采用双指针法进行分区操作,并在递归调用前交换元素位置。当输入数组为空时,程序会输出空行。该算法的时间复杂度为O(nlogn),适用于大规模数据排序。

2025-09-30 17:25:23 606

原创 Algorithm: Quick Sort 快速排序

快速排序是一种分治算法,通过选取基准值将数组分为两部分(小于基准和大于基准),然后递归排序子数组。算法包含三个核心步骤:选取基准、分区、递归排序。伪代码展示了基本框架,Python和C++实现了具体操作。关键点在于分区函数,它通过交换元素将数组重新排列,并返回基准位置。该算法平均时间复杂度为O(n log n),最坏情况O(n²)。

2025-09-30 16:44:46 139

原创 Problem: lab-week4- exercise01 Merge Sort

本文展示了一个归并排序的实现,分别用Python和C++编写。算法通过递归将数组不断划分为更小的子数组进行排序,然后合并已排序的子数组。Python版本将数组分割为左右两部分递归处理,再合并排序结果;C++版本采用类似的递归分治策略,但直接在原数组上进行操作。两种实现都处理了空数组的特殊情况,并最终输出排序后的数组。代码展示了归并排序的核心思想:分治、递归和合并有序子序列。

2025-09-29 19:17:14 246

原创 Algorithm: Merge Sort 归并排序

摘要: 文章介绍了归并排序算法,采用分治策略将列表不断二分直至最小单元,再合并排序后的子列表。提供了伪代码解释算法逻辑,包括mergeSort递归划分和merge合并有序子数组的过程。同时给出Python和C++的实现代码,展示如何通过递归调用完成排序,其中Python版本直接操作数组切片,而C++版本使用向量和索引控制。两种语言实现都遵循相同的分治合并思想,时间复杂度为O(n log n)。

2025-09-26 12:26:07 149

原创 Asymptotic Notation: Big-Oh, Big-Omega, Big-Theta, Small-Oh, Small-Omega

本文介绍了算法分析中常用的渐进符号:Big-Oh表示上界(最坏情况),Big-Omega表示下界(最好情况),Big-Theta表示紧确界(平均情况)。还定义了Little-Oh和Little-Omega分别表示严格上界和下界。最后列出了常见函数增长顺序(从对数到指数)和算法复杂度分类(对数、线性、多项式、指数等),为算法复杂度分析提供了基础理论框架。

2025-09-25 17:06:04 736

原创 Problem: lab-week3- exercise03 Selection sort

本文介绍了使用选择排序算法对输入的整数数组进行排序的解决方案。提供了Python和C++两种实现代码,核心思想是每次从未排序部分找到最小元素,与当前元素交换位置。两种实现都处理了空输入(n=0)的情况,输出时用空格分隔已排序数组元素。时间复杂度为O(n²),适合小规模数据排序。

2025-09-19 17:07:04 173

原创 Algorithm: Selection Sort 选择排序

摘要:选择排序通过重复查找未排序部分的最小元素并交换到已排序部分的末尾。算法步骤为:1)从第1到第n个元素遍历;2)每次遍历找到最小元素索引;3)交换当前元素与最小元素。提供了伪代码、Python和C++实现。时间复杂度为O(n²),适用于小规模数据排序。

2025-09-19 16:59:07 393

原创 Problem: Lab-week3-exercise-02 Bubble sort

本文展示了冒泡排序算法的Python和C++实现。当输入n=0时直接输出空行,否则读取n个整数进行排序。算法通过比较相邻元素并交换顺序错误的元素,每轮将最大元素"冒泡"到末尾。优化点在于若某轮未发生交换则提前终止。两种语言实现逻辑相同:外层循环控制轮次,内层循环比较交换,并设置标志位检测是否已有序。代码结构清晰,体现了冒泡排序的基本思想和优化策略。

2025-09-19 16:46:23 181

原创 Problem: lab-week3- exercise01 Insertion sort

本文展示了插入排序算法的Python和C++实现。代码首先读取整数n和n个元素的数组,当n=0时直接输出空行。对于非空数组,通过遍历每个元素并将其与前面已排序部分比较交换,直到找到正确位置,最终输出排序后的数组。两种语言实现逻辑相同,都使用嵌套循环完成插入排序的核心操作。

2025-09-19 16:13:51 327

原创 Algorithm: Bubble Sort 冒泡排序

本文介绍了冒泡排序算法的实现过程。通过示例展示了每次遍历都能将当前最大元素正确归位的排序原理。文章提供了冒泡排序的伪代码描述,并分别用Python和C++实现了该算法。算法核心是通过双重循环比较相邻元素,若顺序错误则交换,并使用标志位优化过程。时间复杂度为O(n²),适合小规模数据排序。

2025-09-17 12:53:03 300

原创 Problem: Lab-week2-exercise 02 Find Closest Element in Sorted Array

摘要:这段代码实现了在有序数组中查找目标值或最接近值的算法。通过二分查找定位到目标值的位置,若未找到则比较左右相邻元素与目标的差值,输出更接近的索引。Python和C++版本都遵循相同的逻辑:初始化左右指针进行二分搜索,处理三种情况(小于、大于、等于目标值),最后比较相邻元素差值确定最近位置。算法时间复杂度为O(log n)。

2025-09-12 17:18:27 445

原创 Problem: Lab-week2-exercise 01 Binary Search

这篇文章介绍了二分查找算法的实现,分别用Python和C++编写了代码示例。文章首先展示了一个查找问题,然后简要说明算法已在另一篇博客中详细解释,并提供了链接。核心内容是两个语言的代码实现:通过维护左右指针不断缩小搜索范围,直到找到目标值或确定不存在。两种语言的实现逻辑一致,都是经典的二分查找方法,最终输出目标值的索引或-1表示未找到。

2025-09-12 16:50:19 303

原创 Problem: Lab-week1-exercise02 Array Maximum

摘要:该问题要求找出数组中的最大值。通过遍历数组元素并与当前最大值比较来更新最大值。Python实现使用列表存储输入,初始化最大值为首元素,遍历比较更新最大值。C++实现则直接读取输入流,边读取边比较,无需存储整个数组。两种方法都能高效找出数组最大值,时间复杂度均为O(n)。

2025-09-10 13:51:07 415

原创 Problem: Lab-week1-exercise01 Array Sum

题目要求计算n个整数的总和。Python和C++代码分别实现了这一功能:Python使用列表和循环求和,C++通过循环累加输入值。注意处理大数时使用长整型以防止溢出。两种语言都遵循相同的算法逻辑,逐个读取输入值并累加求和,最后输出结果。

2025-09-10 13:39:54 151

原创 Algorithm: Linear Search & Binary Search 线性查找与二分查找

本文介绍了两种搜索算法:线性搜索和二分搜索。线性搜索通过逐个检查列表元素来查找目标值,时间复杂度为O(n)。二分搜索针对已排序列表,通过不断折半缩小搜索范围,时间复杂度为O(log n)。文章提供了两种算法的Python实现代码,并附有二分搜索的流程图说明其工作原理。二分搜索通过比较中间值与目标值大小来决定搜索左半或右半部分,效率更高但要求数据预先排序。

2025-09-09 17:47:14 462

原创 Algorithm: Insertion Sort 插入排序

本文介绍了插入排序算法,通过图示展示了其工作原理:从左到右依次处理每个元素,通过与左侧元素比较并交换位置实现排序。提供了伪代码描述算法流程,并给出了C++和Python的实现代码。插入排序的时间复杂度为O(n²),是一种简单直观的排序方法,适合小规模数据排序。代码示例展示了如何从输入读取数据并输出排序结果。

2025-09-04 17:37:27 329

原创 UFUG2601-OJ 2048 Game

The 2048 game was a popular mini-game back in 2014. The game's basic concept is merging and summing the numbers of power of 2(2^N)If you are not familiar with the game, you can play a few rounds here:2048 (play2048.co)

2024-09-03 14:02:54 940

原创 UFUG2601-OJ palindrome

Given an integer x, return true if x is a palindrome, and false otherwise.

2024-09-03 10:07:03 281

原创 洛谷 P1095 [NOIP2007 普及组] 守望者的逃离

守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。守望者的跑步速度为17m/s,以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10 点。守望者的魔法值恢复的速度为4点每秒,只有处在原地休息状态时才能恢复。现在已知守望者的魔法初值M,他所在的初始位置与岛的出口之间的距离S,岛沉没的时间T。你的任务是写一个程序帮助守望者计算如何在最短的时间内

2023-04-02 08:32:36 890

原创 NOIP2022游寄

NOIP2022游寄+绵阳七日游

2022-11-26 20:19:51 2392 1

原创 洛谷 P2486 [SDOI2011]染色

给定一棵n个节点的无根树,共有m个操作,操作分为两种:1. 将节点a到节点b的路径上的所有点(包括a和b)都染成颜色c。2. 询问节点a到节点b的路径上的颜色段数量。颜色段的定义是极长的连续相同颜色被认为是一段。例如112221由三段组成:11、222、1。

2022-11-07 07:34:50 361

原创 洛谷 P4616 [COCI2017-2018#5] Pictionary

在宇宙一个不为人知的地方,有一个星球,上面有一个国家,只有数学家居住。在这个国家有n个数学家,有趣的是,每个数学家都住在自己的城市,且城市间无道路相连,因为他们可以在线交流。当然,城市有从1到n的编号。一位数学家决定用手机发论文,而手机将“不言而喻”自动更正成了“猜谜游戏”。不久之后,这个国家就发现了猜谜游戏。他们想要见面一起玩,于是这个国家就开始了修路工程。道路修建会持续m天。对于第i天,若gcd(a,b)=m-i+1,则a和b城市间会修一条路。由于数学家们忙于建筑工作,请你来确定一对数学家最早什么时候能

2022-11-02 20:37:24 348

原创 洛谷 P3263 [JLOI2015]有意义的字符串

B 君有两个好朋友,他们叫宁宁和冉冉。有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求⌊((b+sqrt(d))/2)^n⌋mod p其中p=7528443412579576937

2022-11-02 19:43:13 400

原创 洛谷 P4440 [COCI2017-2018#3] Programiranje

Little Leticija正在准备编程考试。虽然她已经解决了很多任务,但还有一个任务尚未解决,所以她正在向你寻求帮助。您将获得单词S和Q查询。在每个查询中,给出正整数A,B,C和D.假设单词X由单词S中位置A和B之间的字母组成,而单词S中位置C和D之间的字母组成单词Y.如果可以以某种方式重新排列单词Y中的字母并获得单词X,则必须回答。

2022-10-31 20:57:48 463

原创 听题目分析心路历程会有感

题目分析心路历程会

2022-10-30 21:15:24 243

原创 2022CSP-S复赛游寄

CSP-S复赛游寄+考后团建

2022-10-29 23:25:40 1779 7

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除