- 博客(34)
- 收藏
- 关注
原创 c++ 图论-强连通分量 小总结
本文总结了求解有向图强连通分量的三种算法:Tarjan、Kosaraju和Garbow算法。Tarjan算法通过DFS遍历,利用dfn和low数组识别强连通分量;Kosaraju算法需要两次DFS,先在原图后序遍历,再在反图上处理;Garbow算法是Tarjan的变种,使用两个栈优化过程。文章还给出了洛谷P3387缩点问题的解法,通过将强连通分量缩点后拓扑排序求最大权值路径。三种算法各有特点,可根据需求选择使用。
2026-02-24 14:11:07
999
原创 c++ 树上问题 小总结
本文总结了三种树结构相关算法:1. 树的直径求解方法(两次DFS法和两种DP方法);2. 树的中心求解方法及其性质;3. 树的重心求解方法(DFS法和换根DP法)。重点介绍了每种算法的实现思路和代码框架,包括P1364医院设置问题中带权树的重心求解。这些算法在解决树结构问题时具有重要应用价值,能有效处理最长路径、最优位置选择等问题。
2026-02-17 14:50:30
735
原创 c++ 逆元 小总结
本文总结了模运算中求乘法逆元的几种方法。首先介绍了逆元的定义:当a与m互质时,存在x使得ax≡1(mod m)。文章详细讲解了四种求解方法:1)扩展欧几里得法(exgcd),通过求解ax+my=1来获得逆元;2)费马小定理法(适用于模数p为质数),利用a^(p-2)求逆元;3)线性递推法,通过递推公式inv[i]=(p-p/i)*inv[p%i]%p批量计算1到n的逆元;4)阶乘逆元法,先计算阶乘数组再倒推求逆元,适用于组合数计算。每种方法均附有代码实现,为模运算中的逆元求解提供了全面参考。
2026-02-16 13:01:19
705
原创 c++ 数据结构-树状数组、线段树 小总结
本文总结了树状数组和线段树两种数据结构的特点与实现。树状数组适用于单点修改和区间查询,具有代码量小、效率高的优点,通过lowbit运算实现快速更新和查询。线段树功能更全面,支持区间修改和查询,能处理max/min等操作,但代码复杂度较高,通过递归构建二叉树结构并使用懒惰标记优化区间操作。文章提供了两种数据结构的模板代码,分别演示了单点修改区间求和(P3374)、单点修改区间最大值(P1531)和区间修改区间求和(P3372)的实现方法,帮助读者理解这两种数据结构的应用场景和实现原理。
2026-02-13 13:06:30
686
原创 c++ 数据结构-单调栈、单调队列 小总结
本文总结了单调栈和单调队列的应用及实现方法。单调栈通过维护单调性(如非递增)高效解决寻找元素右侧首个更大元素的问题(如洛谷P5788),其核心是遍历时比较栈顶元素并动态更新栈结构。单调队列则适用于滑动窗口问题(如洛谷P1886),通过双端队列维护窗口内元素的单调性(求最小值时为非递减),动态移除越界或无效元素以快速获取窗口极值。两者均通过特定数据结构的单调性优化时间复杂度,代码实现中分别使用stack和deque容器,并配合位置索引处理边界条件。
2026-02-12 22:26:30
869
原创 c++ 最近公共祖先 小总结
本文总结了三种求解最近公共祖先(LCA)的算法:倍增法、Tarjan算法和欧拉序+RMQ方法。倍增法通过预处理ST表实现快速跳跃查找;Tarjan算法利用并查集进行离线处理;欧拉序+RMQ则将问题转化为区间最小值查询。每种算法均附有完整代码实现,适用于不同场景下的树结构查询需求。文章对比了各算法特点,为处理树上的LCA问题提供了多种解决方案。
2026-02-12 21:24:53
84
1
原创 c++ 矩阵快速幂 小总结
本文总结了矩阵快速幂的应用方法。首先介绍了矩阵乘法的计算规则和实现代码,然后讲解了快速幂的算法原理。重点阐述了如何将矩阵与快速幂结合使用,通过构造单位矩阵作为初始值,实现矩阵快速幂运算。最后以字符串构造问题为例,展示了如何将动态规划问题转化为矩阵快速幂求解的过程,特别是处理超大指数情况下的优化方法。文章提供了完整的代码实现思路,并解释了矩阵构造的逻辑,为处理类似问题提供了参考方案。
2026-02-11 16:50:30
650
原创 26.2.7练习总结
本次测试包含6道算法题:T1使用分块算法计算整数n的整除和;T2通过合并时间段求解守卫值班的最长"有人"和"没人"区间;T3利用前缀异或和统计等于k的区间数量;T4寻找使村民行走总路程最小的会议点;T5用矩阵快速幂解决大数情况下的字符串构造计数问题;T6要求实现最近公共祖先(LCA)算法。题目涵盖分块、区间合并、前缀和、贪心、动态规划优化和树结构等算法技巧,其中T5的数据规模(n≤10^18)需要特殊的矩阵快速幂解法。
2026-02-08 14:12:34
652
1
原创 26.2.6练习总结
本文总结了两次算法测试的解题思路。第一次测试涉及棋盘棋子攻击对数统计、序列差平方和计算、数字变换操作次数、子数组乘积统计、课程安排优化和牛奶桶倾倒问题,主要运用了map统计、数学推导、动态规划、前缀和、贪心算法和BFS等方法。第二次测试包含纯偶数生成、字符串子序列统计、文件合并代价优化、异或运算最大值、网格填数方案计算和最短路径问题,使用了进制转换、前缀和、优先队列、位运算、快速幂和BFS等技术。这些题目涵盖了多种算法范式,考察了数学建模和优化能力。
2026-02-06 23:45:15
1040
原创 26.2.5练习总结
本次测试包含6道算法题:T1要求通过插入新树使所有树间距相同,利用GCD计算最少插入数量;T2约瑟夫环变体,找出最后被吃掉的人编号;T3迷宫路径问题,统计所有可能伤害值的模数种类;T4数字接龙序列,用DP求最少删除数;T5战斗伤害最大化,限制技能使用次数的动态规划;T6公司聚餐问题,树形DP处理上下级关系。各题均采用动态规划或数学方法求解,考察了GCD、约瑟夫环、路径统计、序列处理等算法能力。
2026-02-05 22:24:53
810
原创 26.2.4练习总结
本文总结了六道算法题的解题思路:1.棋盘染色问题:通过分析左上角两种初始状态,统计最小修改次数;2.游戏血量计算:逆向思维计算初始血量最小值;3.不相邻偷金币:动态规划记录偷/不偷状态的最大值;4.数字分堆:01背包变形寻找最接近总和一半的分法;5.魔法金字塔:三维DP处理k次翻倍的最优解;6.旅行商问题:状压DP或记忆化搜索求解最短环游路线。每道题都提供了核心解题思路和关键算法要点。
2026-02-04 22:13:41
669
原创 26.2.2练习总结
因为是两个数相加,所以在输入x的时候只需要寻找之前有多少个与此数相加等于2^n的,也就是寻找前面数字为2^n-x的数量即可。如果 ai+aj 可以表示成 2 的幂(例如 1,2,4,8,16,…我将i,j都遍历了,k则使用二分去找>=i+j的位置。需要满足选择的三个数字的下标i<j<k,且ai,aj,ak能组成一个三角形。例如 60 的质因数有 2,3,5,因此对应的质因数乘积为 2×3×5=30。有一个 n×m 的方格矩阵,每个格子 (i,j) 内都有一个数字 ai,j。
2026-02-02 22:36:02
577
原创 26.2.1练习总结
本文总结了六道算法题的解题思路:1)T1通过插入1来保证相邻数互质;2)T2计算两人在网格中的最短相遇时间,优先走斜线;3)T3通过排序找到使所有数相等的最小花费;4)T4利用按位或特性筛选符合条件的子序列;5)T5使用双指针法求最长美好子串;6)T6用总方案数减去相邻礼物不同的方案数计算糟糕选择数。每道题都提供了关键解题思路和算法实现要点。
2026-02-01 17:44:43
558
原创 c++ 最小生成树 小总结
本文总结了两种求解最小生成树(MST)的经典算法。Kruskal算法通过排序所有边并逐步合并连通块,时间复杂度为O(mlogm)。Prim算法采用贪心策略,从起点扩展生成树,使用优先队列优化。两种算法都适用于无向连通图,当图不连通时可检测无解情况。文章提供了两种算法的C++实现代码,展示了核心逻辑和数据结构使用方法。理解这两种算法对掌握图论中的最小生成树问题具有重要意义。
2025-08-28 13:43:58
657
原创 c++ 最短路 小总结
本文总结了三种单源最短路径算法和一种多源最短路径算法。单源算法包括:1) Dijkstra算法(适用于非负权图,时间复杂度O(n^2+m)或优先队列优化后的O(mlogm));2) Bellman-Ford算法(支持负权边,时间复杂度O(mn));3) SPFA算法(队列优化的Bellman-Ford,随机数据下较快)。多源算法采用Floyd算法,通过动态规划实现,时间复杂度O(n^3),可优化空间复杂度至O(n^2)。文章详细介绍了各算法的实现步骤、适用场景和优化方法,并提供了代码示例。
2025-08-27 15:34:50
837
原创 c++ 数据结构-堆、优先队列 小总结
本文总结了堆和优先队列的核心知识点。堆是一种完全二叉树数据结构,分为大根堆和小根堆,具有高效的插入、删除和建堆操作(时间复杂度O(logn))。堆可以用数组实现,通过向上/向下调整维护堆性质。优先队列是STL提供的容器,默认实现为大根堆,支持插入(push)、删除(pop)和查询(top)操作,时间复杂度均为O(logn)。文章还给出了堆排序的实现代码和优先队列的基本使用方法。这两种数据结构在需要高效获取最大/最小元素的场景中具有重要应用价值。
2025-08-26 11:42:06
761
原创 c++ 数据结构-并查集、ST表 小总结
本文总结了并查集和ST表两种数据结构。并查集用于处理不相交集合的合并与查询,支持路径压缩优化,核心操作为查找根节点和合并集合。ST表适用于静态区间查询问题,通过预处理构建二维数组,利用二进制拆分思想快速回答区间最值等查询。两种数据结构各有特点:并查集擅长动态集合操作,ST表则针对静态数据的高效区间查询。
2025-08-22 16:33:29
440
原创 c++ 素数筛 小总结
本文介绍了两种素数筛选算法:埃氏筛和欧拉筛。埃氏筛通过标记非素数来筛选素数,时间复杂度为O(nloglogn)。欧拉筛更高效,保证每个合数只被其最小质因数筛除,实现线性时间复杂度O(n)。两种算法都使用bool数组标记素数,但欧拉筛额外维护素数数组优化效率。代码示例展示了具体实现,其中欧拉筛通过及时break循环避免重复标记。两种筛法适用于不同场景,可根据需求选择使用。
2025-08-22 13:00:48
442
原创 c++ 图 小总结
本文总结了图的基本概念和存储方式。图由顶点和边组成,分为无向图和有向图,涉及度数、边权、连通性等概念。存储方式主要有邻接矩阵(适合稠密图)和邻接表(适合稀疏图)两种,重点介绍了使用vector实现邻接表的方法,包括边的添加、查询和清除操作。该总结为图论学习提供了基础框架。
2025-08-12 14:58:56
553
原创 c++ 数据结构-集合,映射,树 小总结
本文总结了C++中集合(set)和映射(map)的基本用法及树形结构的相关概念。集合(set)具有元素唯一性和自动排序特性,介绍了插入、删除、查找等常用操作;映射(map)存储键值对,每个键唯一,讲解了键值访问、查找等操作。在树结构部分,阐述了节点、根节点、子节点等基本概念,重点介绍了二叉树的定义、分类(完美/完全二叉树)及其性质,并说明了前序、中序、后序三种遍历方式。全文系统梳理了这些数据结构的核心知识点。
2025-08-12 13:12:29
1207
原创 c++ 动态规划 小总结
本文总结了动态规划算法的核心概念和应用。动态规划通过分解问题为相关子问题,利用子问题答案求解原问题,适用于具有最优子结构和无后效性的问题。关键概念包括:1)状态表示问题局面,定义应包含所有可能变动;2)状态转移方程描述状态间关系,体现最优子结构。文章通过数字金字塔、最长上升子序列和最长公共子序列三个经典问题,展示了动态规划的具体实现,包括状态定义、转移方程和代码示例。这些示例体现了动态规划在解决最优化和计数问题中的通用思路。
2025-08-01 23:23:00
922
原创 c++ 数学 小总结
本文总结了数学中几个重要知识点:1)最大公约数的质因数分解法和辗转相除法;2)最小公倍数的求解方法;3)埃氏素数筛法;4)同余定理及其性质;5)计数原理(加法/乘法)、排列组合的公式推导与代码实现。重点介绍了算法原理、数学推导和示例代码,为数学计算问题提供了实用的解决方案。
2025-08-01 19:33:39
883
原创 c++ 二分 小总结
本文总结了二分查找算法及其应用。二分查找是在有序数组中快速定位元素的算法,时间复杂度为O(logn)。文章介绍了基本二分查找的实现方式,通过左右指针不断缩小查找范围。同时探讨了二分查找的变种,如查找左右边界的情况。此外,还介绍了二分思想在解决具有单调性判定问题中的应用,如通过二分答案解决"伐木机锯片高度"问题。文章提供了查找左右边界的代码示例和二分答案的实现代码,展示了二分算法在解决实际问题中的高效性和灵活性。
2025-07-25 14:19:04
604
原创 c++ 数码 小总结
本文总结了计算机中数字存储的基本知识。主要包括三种编码方式:原码(符号位表示正负)、反码(负数取反)和补码(负数反码加1),解释了补码能避免0重复、便于运算的优点。还介绍了格雷码的计算方法(gray(n)=n^(n>>1))和位、字节等存储单位换算(1Byte=8bit,1KB=1024Byte等)。最后说明了不同进制数的表示方法(0开头为八进制,0b为二进制,0x为十六进制)。这些基础知识对理解计算机存储和处理数字至关重要。
2025-07-24 14:07:42
342
原创 c++ 转进制、位运算 小总结
本文总结了进制转换和位运算的基础知识。主要内容包括:1)不同进制间的相互转换方法,如二进制转十进制的权重法、十进制转其他进制的短除法;2)小数部分的进制转换原理;3)位运算的6种基本操作(与、或、异或、取反、左移、右移)及其运算规则。文章通过具体例子和代码示例(C++实现)说明了进制转换的实际应用,为理解计算机底层数据表示和位操作提供了实用指导。
2025-07-24 13:06:54
1154
原创 c++ 广搜(BFS)、深搜(DFS) 小总结
本文总结了广度优先搜索(BFS)和深度优先搜索(DFS)的基本概念与实现方法。BFS采用队列实现,按距离初始状态的远近依次访问,适用于最短路径问题;DFS采用递归实现,沿着分支深入到底再回溯,适合探索所有可能路径。文章提供了两种算法的伪代码实现,并对比了它们的访问顺序和适用场景。BFS保证找到的最短路径,而DFS能遍历所有可能性。这两种基础搜索算法各有特点,可针对不同问题需求选择使用。
2025-07-20 23:44:30
418
原创 c++ 数据结构-栈,队列 小总结
本文总结了栈和队列这两种线性数据结构的特点及实现方式。栈是LIFO(后进先出)结构,操作在栈顶进行,可用数组或STL中的stack实现;队列是FIFO(先进先出)结构,包含队首和队尾操作,可用数组或STL中的queue实现。文章详细介绍了两种数据结构的基本操作(如压入、弹出、查询等)的具体实现方式,包括数组实现和STL模板库使用方法。
2025-07-20 21:22:53
572
原创 c++ 结构体、高精度、快速排序 小总结
本文总结了C++编程中的三个重要知识点:1. 结构体使用及构造函数定义方法;2. 高精度运算的实现原理和示例代码(加法、减法、乘法、除法);3. 快速排序算法原理及C++的sort函数使用方法。文章详细介绍了每种技术的实现细节和注意事项,为处理复杂数据类型、大数运算和高效排序提供了实用解决方案。
2025-07-12 00:15:19
421
原创 c++ 函数 小总结
本文总结了函数的基本知识点:1)函数定义包括返回类型、名称、参数和函数体,无返回值时使用void;2)参数分为形式参数和实际参数,全局变量可在多个函数中使用;3)数组参数传递的是地址,函数内修改会影响原数组;4)局部变量作用域仅限于函数内,可通过引用或全局变量跨函数修改;5)递归函数通过自我调用解决复杂问题,需设置终止条件。文章简要概述了函数定义、参数传递、变量作用域和递归等核心概念。
2025-07-11 16:44:05
435
原创 c++ 字符串 小总结
本文总结了字符串的两种类型:字符数组(char[])和字符串(string)。字符数组操作包括输入输出方法(scanf/cin/fgets等)、常用函数(strlen/strcpy)及防范越界风险;string类型则介绍了getline读取、substr截取、insert插入、find查找等实用方法,并比较了两者的区别。全文简明扼要地梳理了字符串处理的核心知识点,为编程学习提供了清晰的参考指南。
2025-07-08 22:17:52
344
原创 洛谷 P5730 【深基5.例10】显示屏 解析
摘要:题目要求将一串数字以3×5点阵形式显示在液晶屏上(X表示亮,.表示暗)。输入数字位数n(≤100)和数字串,输出五行点阵图案,数字间需空一列。解题思路包括:1)用字符数组存储数字;2)预存0-9的点阵模板;3)按行处理输出,注意数字间隔。关键点在于正确处理字符与数字的转换,以及点阵模板的构建和输出格式控制。
2025-07-08 00:23:54
435
原创 CODEFORCES K-th Not Divisible by n 解析
摘要:本文解决了一个数学问题:找出第k个不能被n整除的正整数。通过分析,发现可以将数字序列按(n-1)个一组划分,其中每组都跳过n的倍数。解题关键在于计算完整组数和剩余数,公式为:当k不能被(n-1)整除时,结果为k/(n-1)*n + k%(n-1);若能被整除则需减1。文中给出了C++实现代码,通过循环处理多个测试用例,有效解决了该问题。时间复杂度为O(1)每测试用例。
2025-07-06 23:46:17
406
原创 CODEFORCES Same Parity Summands 解析
摘要:题目要求将正整数n分解为k个同奇偶性的正整数之和。分析n和k的奇偶性组合:当n为奇数且k为偶数时无解;n为奇数且k为奇数时,需满足k≤n,构造为(k-1)个1和(n-k+1);n为偶数且k为偶数时,构造为(k-1)个1和(n-k+1);n为偶数且k为奇数时,需满足2k≤n,构造为(k-1)个2和(n-2(k-1))。若条件不满足则输出NO。代码实现了上述逻辑判断和构造过程。
2025-07-06 22:23:10
459
原创 洛谷P1055 [NOIP 2008 普及组] ISBN 号码 解析
摘要:本文介绍了ISBN号码的校验方法及其编程实现。ISBN由9位数字、3位分隔符和1位校验码组成,校验码计算方法是前9位数字分别乘以1-9后求和,取模11的余数(余数为10时用X表示)。文章提供了两种C++实现方案:第一种使用字符和数字变量分段处理,第二种使用字符串统一处理。两种方法都涉及字符到数字的转换(减'0')和X的特殊处理。程序会判断输入的校验码是否正确,若错误则输出正确号码。字符串方案更简洁,使用erase和直接输出修正结果。
2025-07-06 21:05:28
396
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅