- 博客(39)
- 收藏
- 关注
原创 “typedef“知识详解
这里,uint就成为了unsigned int的别名。int id;} Employee;这里,Employee就成为了上述结构体的别名。这里,pchar就成为了char*的别名。这里,arr10就成为了包含10个整数的数组的别名。
2024-12-21 16:30:15
333
原创 “宏“知识详解
在C语言和C++中, #define 是预处理指令,用于定义宏。宏是一种在编译之前进行处理的指令,它不是C或C++语言的一部分,而是由预处理器处理的。使用 #define 可以定义常量,这在C语言中是定义常量的主要方式(C++中推荐使用 const 或 constexpr )
2024-12-21 16:23:19
330
原创 字符串知识
• 字符串字面量:在 C++中,字符串字面量是用双引号括起来的字符序列,如"Hello, World!• 字符串连接:可以使用+运算符或std::string::append方法来连接两个字符串。• 字符串长度:std::string::length方法或size()方法可以返回字符串的长度。• 字符串比较:可以使用==和!=运算符来比较两个字符串是否相等或不相等。,=运算符可以用于比较字符串的字典顺序。
2024-12-10 00:16:07
857
原创 DFS,BFS,二分应用情况
是一种用于遍历或搜索树或图的算法。它沿着树的深度遍历树的节点,尽可能深地搜索树的分支。DFS 常用于以下情况:• 树或图的遍历:用于访问树或图中的所有节点。• 路径搜索问题:寻找从一个节点到另一个节点的路径,例如在迷宫中寻找路径。• 连通性问题:确定图中的节点是否连通,或者找出图中的最大连通子图。• 拓扑排序:对于有向无环图(DAG),DFS 可以用来进行拓扑排序。• 求解迷宫问题:在迷宫中找到从起点到终点的路径。• 求解某些类型的搜索问题:例如八皇后问题、图着色问题等。
2024-12-05 13:13:56
1464
原创 位运算总结
是直接对整数在内存中的二进制位进行操作的一种运算方式。在计算机中,所有的数据最终都是以二进制形式存储的,位运算允许程序员直接对这些二进制位进行操作,这使得位运算在某些情况下可以非常高效。以下是一些基本的位运算:• 位与(AND):用符号`&`表示。对两个数的每一位进行比较,只有当两位都是1时,结果位才为1。• 位或(OR):用符号`|`表示。对两个数的每一位进行比较,只要两位中有一个是1,结果位就为1。• 位异或(XOR):用符号`^`表示。
2024-12-04 18:12:00
652
原创 子数组概念
是指一个数组中的连续一段元素组成的新数组。例如,对于数组[1, 2, 3, 4],其子数组包括[1]、[2]、[3]、[4]、[1, 2]、[2, 3]、[3, 4]、[1, 2, 3]、[2, 3, 4]和[1, 2, 3, 4]等。要计算一个数组的所有子数组,你可以按照以下步骤进行:• 确定数组长度:首先,你需要知道数组的长度n。• 遍历所有可能的子数组起始位置:对于数组中的每个元素,都可以作为子数组的起始位置。
2024-12-04 18:09:35
323
原创 AcWing 841. 字符串哈希
一种将任意长度的字符串转换为固定长度数值(通常是整数)的过程。全称字符串前缀哈希法,把字符串变成一个p进制数字(哈希值),实现不同的字符串映射到不同的数字。对形如 X1X2X3⋯Xn−1Xn的字符串,采用字符的ascii 码乘上 P 的次方来计算哈希值。
2024-12-03 21:04:26
383
原创 AcWing143. 最大异或对
是一种逻辑运算,用于比较两个位(bit),当且仅当两个比较的位不同(一个为0,另一个为1)时,结果为1(真)。如果两个比较的位相同(都是0或都是1),结果为0(假)。在数学符号中,异或通常用符号“⊕”表示。
2024-12-03 20:08:09
414
原创 AcWing 835.Trie字符串统计
又称为前缀树或字典树,是一种用于快速检索字符串数据集中的键的数据结构。它特别适合于实现关联数组,即键到值的映射,其中键是字符串。Trie 的核心思想是将字符串的公共前缀存储一次,以此来节省空间,并提高查找效率。
2024-12-03 16:43:01
361
原创 AcWing 828. 模拟栈
是一种遵循后进先出(Last In First Out,LIFO)原则的数据结构。它具有以下基本操作:1. Push:将一个元素添加到栈顶。2. Pop:移除栈顶元素,并返回它。3. Peek/Top:查看栈顶元素,但不移除它。4. IsEmpty:检查栈是否为空。5. Size:返回栈中元素的数量。
2024-12-02 21:15:29
263
原创 AcWing 827.双链表
是一种常见的数据结构,它由一系列节点组成,每个节点包含三个部分:数据域和两个指针域。这两个指针分别指向前一个节点和后一个节点,因此每个节点都可以向前和向后遍历。
2024-12-02 20:41:16
277
原创 朴素Dijkstra与堆优化Dijkstra总结
适合稠密图,具体问题用邻接矩阵存。思路:集合S为已经确定最短路径的点集。初始化距离一号结点的距离为零,其他结点的距离设为无穷大(看具体的题)。循环n次,每一次将集合S之外距离最短X的点加入到S中去(这里的距离最短指的是距离1号点最近。点X的路径一定最短,基于贪心,严格证明待看)。然后用点X更新X邻接点的距离。时间复杂度分析:寻找路径最短的点:O(n2)加入集合S:O(n)更新距离:O(m)所以总的时间复杂度为O(n2)
2024-12-02 19:10:25
239
原创 AcWing 826.单链表
是一种基础的数据结构,它由一系列节点组成,每个节点包含两部分:数据部分和指向下一个节点的指针部分。在单链表中,节点是线性排列的,每个节点的指针指向序列中的下一个节点,直到最后一个节点,它的指针通常指向 null ,表示链表的结束。
2024-12-02 17:36:45
330
原创 AcWing 850. Diikstra求最短路 ||(用堆对朴素版的优化)
堆(Heap)是一种特殊的完全二叉树,它满足特定的性质,通常有两种类型:最大堆(Max Heap)和最小堆(Min Heap)。1. 最大堆(Max Heap):• 在最大堆中,任何一个父节点的值都大于或等于其子节点的值。• 堆顶(根节点)是堆中的最大值。2. 最小堆(Min Heap):• 在最小堆中,任何一个父节点的值都小于或等于其子节点的值。• 堆顶(根节点)是堆中的最小值。堆通常用数组来实现,因为数组可以提供快速的随机访问能力。
2024-12-01 19:48:53
831
原创 AcWing 849. Diikstra求最短路I
如果需要修改代码以支持从1号点到任意一个编号小于 n 的节点 a 的最短路径查询,你需要对 dijkstra 函数进行一些调整,使其能够接受一个参数来指定目标节点。这样修改后,程序就可以支持从1号节点到任意一个编号小于 n 的节点 a 的最短路径查询。3. 函数调用:调用 dijkstra(a) ,计算从1号节点到 a 节点的最短距离。1. 函数参数: dijkstra 函数现在接受一个参数 end ,表示目标节点。2. 用户输入:在 main 函数中,接收用户输入的目标节点 a。
2024-12-01 16:45:37
744
原创 R格式(高精度x低精度+四舍五入)
for(auto c:b) : 是一个基于范围的 for 循环,它是 C++11 及以后版本中引入的一种新的循环语法。在这个循环中, c 的 类型将与容器 b 中的元素类型相同。• b :这是要遍历的容器,其类型可以是数组、向量、字符串等。• c :这是循环变量,用于存储容器 b 中的每个元素的值。2. (auto c:b) :这是基于范围的 for 循环的特定语法。• : :这是分隔符,用于分隔循环变量和容器。
2024-11-30 17:24:46
486
原创 AcWing 848.有向图的拓扑序列
若一个由图中所有点构成的序列 A满足:对于图中的每条边(e,y), c在A中都出现在y之前,则称 A是该图的一个拓扑序列。
2024-11-24 21:23:15
782
原创 AcWing 844.走迷宫(广度优先搜索BFS)
广度优先搜索(Breadth-First Search,BFS)是一种用于图的遍历或搜索的算法,它按照从起点出发的“距离”来探索图的节点。这里的“距离”可以是节点之间的边数,也可以是其他度量标准,比如路径的权重总和。特点:• 先进先出(FIFO):BFS 使用队列来存储待访问的节点,确保节点按照它们被发现的顺序被访问。• 层级遍历:从起点开始,先访问所有相邻的节点(第一层),然后是这些节点的相邻节点(第二层),依此类推。• 最短路径:在无权图中,BFS 可以找到从起点到任意节点的最短路径。
2024-11-21 18:54:24
1550
原创 AcWing 843.n-皇后问题
目的在于减少算法需要处理的候选解的数量,通过提前排除那些不可能产生最优解或者不符合特定条件的候选解,从而减少计算资源的消耗,提高算法的效率。1. α-β剪枝:这是在博弈树搜索中常用的一种剪枝技术,特别是在国际象棋、围棋等棋类游戏的算法中。3. 回溯法中的剪枝:回溯法是一种通过试错来寻找所有解的算法,它在搜索过程中,如果发现当前路径不可能产生有效的解,就会回溯到上一个节点,尝试其他可能的路径。2. 分支限界法:在解决优化问题时,分支限界法通过系统地枚举所有可能的候选解空间树的分支,来寻找最优解。
2024-11-20 19:00:41
294
原创 lower_bound函数和upper_bound 函数
作用:在一个已排序的范围内查找第一个不小于给定目标值val的元素的位置。即返回第一个大于等于val值的位置(通过二分查找)。工作原理:①初始化:它首先将搜索范围设置为整个给定的区间(通常是一个有序数组或容器的一部分)。②二分查找:通过不断将当前搜索范围对半划分,比较中间元素与目标值。- 如果中间元素小于目标值,就将搜索范围缩小到右半部分。- 如果中间元素大于或等于目标值,就将搜索范围缩小到左半部分。
2024-11-16 17:06:22
1510
原创 AcWing 798.差分矩阵(二维差分)
让整个a数组中红色矩形面积的元素再加上c,红色内的相当于被减了两次,再加上一次c,才能使其恢复。让整个a数组中紫色矩形面积的元素再减去c,使其内元素不发生改变。b[x1][y2+1]-=c让整个a数b组中绿色矩形面积的元素再减去c,使其内元素不发生改变。b[x1][ y1 ]+=c:让整个a数组中蓝色矩形面积的元素都加上了c;
2024-11-14 19:55:22
364
原创 AcWing 797.差分(一维差分)
4.给定区间[l,r],让我们把a数组中的[ l, r] 区间中的每一个数都加上c做法:①首先让差分b数组中的 b[l] +c,a数组变成a[l] + c , a[l+1] + c, …b[l] + c,效果使得a数组中 a[1] 及以后的数都加上了c(红色部分),但我们只要求l到r区间加上 c, 因此还需要执行b[r+1] - c,让a数组中 a[r+1]及往后的区间再减去c(绿色部分),这样对于a[r] 以后区间的数相当于没有发生改变。时间复杂度为0(1),大提高了效率。
2024-11-14 18:37:14
144
原创 AcWing 795.前缀和(一维)
一维数组求解前缀和(Si)①for循环求出每个S[i](将 S[0] 定义为0,避免下标的转换)②求[l, r)]中的和,即为 S[r]- S[I-1]前缀和定义:原数组:a[1] ·…,a[n]前缀和Si为数组的前i项和;前缀和:S[i] = a[1] + …注意:前缀和的下标一定要从1开始,避免进行下标的转换。前缀和的作用:快速求出元素组中某段区间的和。
2024-11-14 16:38:13
106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人