- 博客(79)
- 收藏
- 关注
原创 C++ DFS深搜详解
《C++深度优先搜索(DFS)算法详解》是一篇生动讲解DFS算法的技术文章。文章首先用"走迷宫"的比喻形象阐释了DFS"一条路走到黑,再回溯"的核心思想,随后详细介绍了DFS的递归和迭代两种实现方式,并提供了标准代码模板。通过"全排列"问题的实战演示,展示了DFS解决组合问题的典型应用场景。文章还对比了DFS与BFS的特性差异,列举了DFS的常见应用领域,最后给出了剪枝优化、状态记录等实用技巧。全文语言活泼风趣,在严谨的技术讲解中穿插了形象的类比,
2026-06-03 21:30:12
375
原创 均摊复杂度与常数因子实战陷阱
例如,一个时间复杂度为O(100n)的算法在实际运行时可能远慢于一个O(n²)但常数因子极小的算法,当n较小时。例如,在分析基于比较的排序算法时,一次“比较”操作的成本对于整数很小,但对于复杂的自定义对象(需要调用重载的。在时间与空间复杂度分析的理论基础之上,算法设计与工程实践中存在多个进阶考量维度与常见陷阱,这些内容在基础定义之外,构成了算法效能优化与稳健实现的关键。例如,字符串反转问题,分配一个新字符串是O(n)空间,原地交换是O(1)空间,但后者可能涉及指针操作和边界条件,增加错误风险。
2026-04-16 20:30:42
335
原创 排序算法大全:从冒泡到快排(C++ 图解 + 代码)
排序,是程序员日常工作中接触最频繁的操作之一。从数据库的 ORDER BY,到搜索引擎的结果排名,背后都离不开排序算法的身影。本文将带你系统梳理8 大经典排序算法📊 图解演示过程💻 C++ 完整代码⏱ 时间/空间复杂度分析🎯 适用场景总结废话不多说,开始!✅ 实现最简单,适合入门理解✅ 数据基本有序时,加swapped优化后接近 O(n)❌ 数据量大时性能差,不推荐实际使用✅ 交换次数少,只有 O(n) 次,适合交换代价大的场景❌ 比较次数始终是 O(n²),不受初始顺序影响。
2026-03-31 19:54:51
512
原创 c++阿克曼函数详解
你有没有想过,一个看起来只有三行的函数,竟然能让你的电脑算到"宇宙热寂"都得不出结果?今天我们来认识一个计算机科学史上鼎鼎大名的函数——阿克曼函数(Ackermann Function)。它不仅是递归的极致体现,更是可计算性理论中的重要案例。本文将带你从零认识它,并用 C++ 一步步实现。阿克曼函数由德国数学家于 1928 年提出,其定义如下:其中 mm 和 nn 均为非负整数。增长速度极其恐怖。特性说明定义方式双参数递归定义增长速度超过任意原始递归函数,极其恐怖实现挑战。
2026-03-31 19:32:45
467
原创 314343.最大回文数各位数和
题目要求找出≤n的最大回文数并计算其各位数字之和。解决思路:从n开始递减遍历,用isPalindrome函数判断回文数(通过数字反转比较),找到后调用sumDigits函数计算各位和(逐位取模累加)。时间复杂度O(n),空间复杂度O(1)。示例:输入11,输出2(因11是回文数,1+1=2)。该解法能有效处理给定范围内的最大回文数求和各问题。
2025-07-20 10:10:05
298
原创 前缀和讲解
下列代码执行完成之后,数组b中的最大值为(?i++)参考代码,下面描述正确的是( )int n, v;cin >> n;sum[0] = 0;i < n;
2025-03-07 20:05:38
1113
原创 二维数组小技巧
但是我们在编写程序时,可能已经默认 ai 为 0 了,这会造成程序运行的错误,在这种情况下,我们需要先把 ai 的值设为 0。对于变量,如果不赋初始值会有一个默认值。那么数组中的元素是否有同样的性质呢?我们可以使用循环来实现这个功能。但实际上有一个专门处理这个问题的方法: memset。如果我们打开编译优化参数,然后直接运行这段程序,你可以看到后面输出的值可能并不为 0。注:本文来源于51nod,为I蓝胖子I编辑,如有侵权,请及时联系。邮箱:Qgp6957@126.com。代码运行结果详细注释。
2025-03-07 19:31:50
289
原创 完美方阵
第一行输入一个数 n ,表示一个方阵的行列数;之后 n 行,每行 n 个数,表示方阵中的每个元素 a[i][j] ,以空格隔开;若这个方阵是完美方阵,输出“ YES ”,否则输出“ NO ”。对于 30% 的数据, 1≤n≤10 , 0≤a[i][j]≤15;对于 50% 的数据, 1≤n≤20 , 0≤a[i][j]≤100;对于 100% 的数据, 1≤n≤50 , 0≤a[i][j]≤1000。样例输入样例输出样例YES样例中,对于每行: 3+4+8=7+2+6=5+9+1=15;
2025-03-07 19:22:20
391
原创 51NOD回文数
数字回文的判定,如果一个数字从左往右看和从右往左看是一样的,那么我们称这个数字是回文数字,例如 121,454454,67876,5,22 都是回文数字,而 223,56,10 就不是回文数字。现在读入一个数字 X ,请你写程序判断一下它是不是回文数字。输入数据输入一个正整数 X。输出数据如果 X 是回文数,输出 "yes";如果不是,输出 "no"。样例输入样例334533输出样例no。
2025-02-28 19:57:58
212
原创 逆置换 51nod
输入一个 1 到 n 的排列, p[1],p[2],...,p[n] ,即 1 到 n 都出现了 1 次的一个长度为 n 的数组 p。求数组 p 中,数字 1,2,3⋯n 出现的位置。输入数据第一行一个整数 n ,表示排列长度。接下来 n 行,每行一个整数 p[i] ,表示排列的内容。其中 1≤n≤1e5。输出数据第一行输出一个排列长度 n ,为了方便造数据。输出共 n 行,其中第 i 行包含一个整数 j ,使得 p[j]=i。样例输入样例44312输出样例4342。
2025-02-28 19:53:36
220
原创 逆序对个数1000
有一串数字,如果前面的数字比后面的数字大,那么就称这两个数为一对逆序对。输入一个长度为 n 的数组,输出逆序对的个数。也就是说问有多少对 (i,j) 满足 1≤i<j≤n ,且 a[i]>a[j]。输入数据第一行一个整数 n ,表示数组长度接下来 n 行,每行一个整数 a[i] ,表示数组的内容。输出数据输出一行一个数字,表示逆序对的个数。样例输入样例44312输出样例5读入数组 a,利用双重循环逐个比较元素的数值,并做计数。注意,为了不重复统计,每个数只同后面的数字进行比较。
2025-02-28 19:50:31
276
原创 岁月漫长,然而值得去创造:
大家好,我是你们熟悉的小罐头甜。旧的一年即将过去,新的一年即将到来。在崭新的2025年里,我相信大家会给csdn带来贡献。岁月漫长,然而值得去创造。希望大家在2025年里,去创造,去改变!再此,小罐头甜再次祝贺大家新年快乐,万事如意!
2025-01-17 19:30:28
165
原创 accoders 【一本通基础高精度】计算2的N次方
输入一个整数n,然后使用数组a来表示结果,初始时a[0]为1,然后将a乘以2进行n次,最后输出结果。1.从数组a的最高位开始,寻找第一个不为0的位置,并将从该位置开始到数组末尾的所有元素输出。3.如果数组c当前位置的值大于等于10,则将进位加到下一位上,并将当前位置的值取模10。2.然后遍历数组a的所有元素,将每个元素与b相乘,并将结果存放在数组c对应位置上。3.定义mul_short函数,用于将一个数组a乘以一个整数b,结果存放在数组c中。任意给定一个正整数N(N≤100),计算2的n次方的值。
2025-01-17 19:28:59
430
原创 数组转置!
首先,`transpose3x3`函数接收一个3x3的二维数组`matrix`作为参数,返回一个转置后的二维数组`transposed`。在`main`函数中,首先创建一个3x3的二维数组`matrix`用于存储输入的数据。接下来,调用`transpose3x3`函数对`matrix`进行转置,并将转置后的结果存储到变量`transposed`中。然后在`main`函数中,读取一个3x3的二维数组,调用`transpose3x3`函数进行转置,并将转置后的二维数组打印出来。1秒****128.0MB。
2025-01-17 19:16:50
244
原创 51nod 西湖游船
有n名游客在西湖游玩,现在他们要上船观光。现在有若干次游客上下船的操作,请统计一下整个过程中船所承受过的最大总重量是多少。接下来m行,每行一个1到n之间的整数,表示游客的编号。表示该游客的上/下船,如果该游客已经在船上,那么该游客就下船,反之就上船。输出一个整数表示整个上下船过程中,船所受到的最大重量。第一行输入三个整数n(1≤n≤20),m(1≤m≤500)和W(1≤W≤10000)。接下来n行输入n名游客的重量c[i](1≤c[i]≤1000)。
2025-01-17 18:59:36
358
原创 丢失的数字
这需要一个双重循环来做,内层循环1−m,外层循环1−n。如果n的范围是10w,这两重循环总的循环次数就是50亿。第一行2个整数n,m,直接用空格分隔(1≤n≤100000,m<n),表示有m个1到n之间的整数。接下来m行,每行一个整数ai(1≤ai≤n,数据保证m个数都不相同)。给你m个1到n之间的整数,你能找出1到n中的哪些整数没有出现吗?每行1个数,从小到大输出输入数据中没有出现过的1到n中的整数。
2025-01-17 18:51:47
454
原创 分数约分!
分数约分进阶习题小Z是个小学生,最近刚刚学习到了分数的知识,他苦恼于将分数化简,现在需要写一个程序来帮助他...输入数据两个整数ab(分别表示分子,分母。输出数据两个整数xy(分别表示值为a/b的最简分数的分子与分母)样例输入样例62输出样例31运行时间限制:不超过1秒内存使用限制:不超过128.0MB。
2025-01-17 18:46:25
496
原创 最小公倍数LCM
这里有一个特别需要注意的点是,由于A,B的数据范围是1e9,因此他们的最小公倍数最坏情况下可能达到1e18,超出了int的数据范围,因此直接计算会造成int溢出,所以要用longlong来处理计算。输入2个正整数A,B,求A与B的最小公倍数。2个数A,B,中间用空格隔开。(1≤A,B≤109)输出A与B的最小公倍数。
2025-01-17 18:43:03
224
原创 最大公约数GCD
输入2个正整数A,B,求A与B的最大公约数。输入数据2个数A,B,中间用空格隔开。输出数据输出A与B的最大公约数。样例输入样例30105输出样例15运行时间限制:不超过1秒内存使用限制:不超过128.0MB。
2025-01-17 18:40:17
222
原创 accoders 【字符串】数字OR字符?
然后,使用s.size()函数获取字符串s的长度,并将结果赋值给变量len。接下来,使用for循环遍历字符串s的每个字符,并使用cout输出每个字符,空格分隔。然后,使用for循环从字符串s的最后一个字符开始遍历到第一个字符,并使用cout逆序输出每个字符。题解:这段代码的功能是读取一个字符串并输出字符串的长度,然后按照顺序输出字符串的每个字符,并最后按照逆序输出字符串的每个字符。该代码可以用来演示如何读取和处理字符串,以及如何计算字符串的长度,按照顺序和逆序输出字符串的每个字符。
2025-01-17 18:33:33
213
原创 accoders 【一本通基础高精度】大整数减法
首先,定义了常量N和maxn,分别表示输入的字符串最大长度和大整数的最大位数。通过clear函数将数组a、b和c中的元素全部初始化为0,保证数据的清空。具体来说,从低位到高位遍历两个数组a和b,将对应位相减,并考虑借位的情况,将结果保存在数组c中。最后,通过print函数将数组c输出,即输出了两个大整数相减的差。整体上,这段代码的时间复杂度为O(maxn),其中maxn表示大整数的最大位数。空间复杂度为O(maxn),即需要创建三个长度为maxn+1的数组。求两个大的正整数相减的差。
2025-01-17 18:19:23
329
原创 51nod 上台阶 easy
现在小瓜想通过台阶走上平台,最底层(小瓜所在的层)编号为1,最顶层编号为n。由于小瓜的腿比较短,他一次只能向上走1级或者2级台阶。我们可以定义一个数组dp,其中dp[i]表示小瓜走上第i级台阶的方案数。因此,小瓜走上第i级台阶的总方案数为dp[i]=dp[i-1]+dp[i-2]。根据以上分析,我们可以使用动态规划的思想来求解小瓜走上n级台阶的方案数。对于100%的数据,2≤n≤25;对于28%的数据,2≤n≤10;对于12%的数据,2≤n≤5;
2025-01-17 18:06:22
335
原创 luogu P1035 [NOIP2002 普及组] 级数求和
1nSn=1+21+31+…显然对于任意一个整数kk,当nn足够大的时候,Sn>kSn>k。这段代码使用了数学上的无穷级数的思想,通过不断累加1/1,1/2,1/3,...直到和大于等于k时,得到最小的n值。3.进入一个for循环,循环条件是a<=k,循环变量a从0.00开始,每次循环a增加1.0/n。这段代码的功能是计算当1+1/2+1/3+...+1/n的和大于等于k时,n的最小值。现给出一个整数kk,要求计算出一个最小的nn,使得Sn>kSn>k。
2025-01-17 18:04:54
332
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅