- 博客(33)
- 收藏
- 关注
原创 DFS深度优先搜索
题目可以理解为在1到n这些数中可以重复的选一些数,使其和为n。这就要求我们做到前面已经用过的数字不再出现,因此我们需要一个state数组来去重并且在回溯时恢复现场。DFS是一种暴力的搜索,其核心思想是遍历所有方案,一条路走到黑再进行回溯。在n个数中选出k个数,并且不同顺序的算一种;相比例1的全排列问题,我们要去掉重复的数量。我们只需要判断数组前面的数是否小于后面的数,如果是,就输出。因此最后结果要除以n的全排列也就是n的阶乘。例1:按字典序输出1-n的全排列。跟例2一样,全排列带来了重复问题。
2025-03-14 19:14:39
343
原创 位运算11
先将n右移16位 得到0000 0000 0000 0000 0000 0000 0001 0100。再将n左移16位,得到0000 1110 1101 1000 0000 0000 0000 0000。此题用^来解答,不断的对数组中的每一个数进行^,偶数个的都变成0,奇数个的最后变成答案。求n的二进制表示中第k位是几:n>>k&1;位运算是一种基于二进制编码的运算,常见的位运算符号有>>,<<,&,|,^等等。<<:高位舍弃,低位补0;>>:高位补0,相当于÷2.^:不一样为1,一样为0。
2025-03-06 16:21:18
135
原创 前缀和与差分——一维与二维版
二维前缀和——求子矩阵的和:由坐标(x1,y1)——(x2,y2)一维前缀和是指数组一个区间内所有的和,通过数组和求和数组算出。二维差分——将子矩阵中所有的数都+c。一维差分(给数组的一段数整体+c)
2025-03-03 20:56:26
245
原创 高精度运算
由数据范围可知,n的阶乘一定会产生一个非常大的数,因此我们需要用到高精度算法。需要用到高精度加法与乘法的结合。高精度运算是一种大数的运算,在比赛中,常与阶乘等方法联系起来。这一知识灵活度相对差一些,重点在于记住模板并学会应用。将大数倒序存放进入vector数组中。4:A/a(其中a是小数)。
2025-02-21 18:28:19
197
原创 二分进阶版
已知l的结果范围时1~max(a[i]),假设存在一个临界点l,当当小于等于l时,可以满足分割为k个小段的条件,当大于l时,不满足该条件,满足我们之前所说的单调性。那么,我们该如何知道该用哪一种情况呢,其实,我们只需要写出check函数,然后看为true时是l=mid还是r=mid就好了。这是一道经典的找数问题,很显然C是固定的,那么,只需要找=A+C的数就可以。1:mid=l+r+1>>1,若check函数为true,l=mid,r=mid-1;若check函数为true,r=mid,l=mid+1;
2025-02-20 16:28:58
303
原创 带空格字符串的输入
如果字符串用string输入的话,输入到空格时会自动停止,因此字符串中就不能包括空格,那么,如果要输入带空格的字符串要怎么办呢?
2024-03-11 20:15:42
964
原创 计算方法(二分法)
注意:log在计算机中只有2和10的函数,但如果是求以k为底的函数,就要用到换底公式。思路:从1到e9中二分找出合适的x,暴力搜索。floor:向下取整函数。
2024-03-07 17:48:26
401
1
原创 DFS取数
只需要对情况1进行一下去重操作,比如保证填的数要大于上一个填的数,使数组按字典序排列,(当r==n时,即为n个数的全排列);1:从n个数中取r个数,并区分顺序。2:组合问题,只取数,不考虑顺序;
2024-02-29 19:37:26
543
原创 树的存储第二弹
二:已知二叉树的左右子节点,用结构体数组存树并求深度。一:已知1-n个点的父亲节点,用vector链表存。三:树的三种遍历方式,以及如何通过两种求另外一种。
2023-11-14 19:25:59
54
1
原创 DFS与BFS
2:高中排列组合题,如全排列,取部分数全排列,取数后加和。例题1:Red and Black(BFS)1:队列搜寻类型(迷宫问题)
2023-10-29 14:22:15
84
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人