- 博客(36)
- 收藏
- 关注
原创 C++算法:高精度加法
接下来就是进行大整数的加法。我们按照幼儿园学的从最低位开始,一直到最高位,对每一位进行加法。但是还要处理进位,我们来思考一下,两个个位数相加不可能达到三位数,所以,我们可以通过除以。存不下来,我们可以使用数组,数组的每一位存储大整数的每一位数字。我们可以将每一个大整数看做一个字符串。我们只需要读入字符串,再将字符串转换成数字就行。所以我们有了高精度算法。C++ 中,有一个数据类型叫做。位的整数并不是他们能招架的。来获得一个数的十位,再通过。众所周知,在 C++ 中,并不是万能的,有些长达。
2025-04-12 15:48:47
346
原创 C++ lower_bound & upper_bound
C++ 中和的实现原理皆为二分。引用时追加头文件algorithm又因为在一个数组中二分的前提是数组本身具有单调性,所以在使用这两个函数之前请保证查询数组的单调性哦。
2025-04-02 12:18:33
694
原创 Openjudge 1759:最长上升子序列
整篇文章讲的是针对严格上升的最长上升子序列,即不存在大于等于,但具体要求还是要看每一个题目的要求,需要随机应变。注意,这里不会因为数组顺序而改变结果,因为我们改变的是第一个大于当前这个数的位置。中的最后一位,那么答案就是当前数组的长度,如果不是最后一位,那么后面还有数字,可以替换掉。中第一个大于当前这个数的位置,原理就是让越后面的数字越小,使得能接的数越多。的时候,dp 的做法就很危险。的最后一个数字,那么直接接上,否则就替换在。数组当前的最后一位,如果没有能替换掉。的最长上升子序列的最小的结尾数字。
2025-03-30 19:27:23
1143
原创 Openjudge 4.6算法之贪心/电池的寿命
如果最大值大于其他电池寿命的总和,那答案就是剩下电池寿命的总和。因为其他电池都耗不过电池寿命最大的那个。我们先找到电池寿命最大的一个,然后计算其他电池寿命的总和。否则答案就是电池寿命总和除以。
2025-03-24 21:34:25
139
原创 乘法逆元学习笔记
在讲中国剩余定理的时候,没有系统性的讲一遍乘法逆元,所以有了这一期专栏。如果有一个线性同余方程ax≡1modpax≡1modp,则称xxx为a≡pa\equiv pa≡p的乘法逆元。记作a−1a^{-1}a−1。但是,只有当gcdap1gcdap1时,乘法逆元才存在。
2025-03-20 12:06:20
1013
原创 洛谷 P5435 基于值域预处理的快速 GCD 题解
虽然标题上写着堂堂正正,辉煌的几个字就是本题正解,但是还有比正解更优的做法。当你学完二进制 GCD 之后,就可以直接写出代码,但是要记住取模。
2025-02-08 22:06:51
226
原创 洛谷 P3629 [APIO2010] 巡逻 => 保姆级题解
的过程中遇到负数,那么加上这条边就会使答案不是最大的,也就意味着算上有环的边的答案不可能是最大的,除非只能跟原来的环有公共边。没错,通过以上的推论,我们会惊奇的发现,有了这个环,会让我们在巡逻的过程中只走过一次这些边 (这些边指环上的边)。,相当于要用不是环上的边抵消环上的边。根据我们的前置知识,dfs 的做法遇到负边权就会 GG,所以这里我们用 dp 的做法,前面因为要求路径,所以用 dfs 的求法。条边的树),所以添了一条边之后,树中会呈现一个环,而这个环,除了我们添的边,其他边都是树的直径。
2025-02-07 23:27:24
1937
原创 树的直径=>学习笔记
树的直径是指树上任意两节点之间最长的简单路径。显然一棵树可能不止一条直径,但它们长度相等。两次 dfs 的做法固然简便,但是,它也有个致命的缺点,就是如果遇到负边权,那么直接 GG。所以我们就要引出我们的 dp 做法啦。(1) 的做法可能不太常见,但多学一点也没坏处。虽然 dp 的做法已经解决了两次 dfs 遇到负边权会 GG 的问题,但是,dp 的做法也有个缺点。这个做法它只求直径长度,并不知道经过了哪些节点。
2025-02-07 00:50:14
1653
原创 题解:SP11579 COMPANYS - Two Famous Companies
我们可以进行二分答案,二分的东西是一个增添值。如果白边权值比黑边小,那么就加上它,如果大了,就减掉它。比如说,黑边的所有权值都比白边小,那么一味的套模版最终可能 kruskal 跑出来的不是正确的结果。因为黑边的加入,导致我们的 kruskal 会产生错误的答案。给你一个带权无向图,每条边非白即黑,现在要构造一个生成树使得恰有。采取了二分答案,接下来就是二分的范围,因为边的权值在。这道题目看上去向一个最小生成树的模版,但其实并不是。条白色的边,使权值和最小。因为在这个最小生成树有。,所以二分的范围就是。
2025-02-03 22:06:49
733
原创 洛谷 AT_abc032_d [ABC032D] ナップサック問題 题解
时用的最小体积,那么就直接在里面找最小值就行。普通的 01 背包,直接。
2025-01-25 12:52:34
149
原创 洛谷 P2312 [NOIP2014 提高组] 解方程
但是这种方法有个缺点,就是有时会发生错误.所以在找可以 mod 的数时,我们平时进行一元n次多项式的求值,大概需要进行。正常来讲,这道题目要用高精度来做,但可以通过。但是,如果使用秦九韶算法,就只需进行。一个数来解决这个问题.满足一下几个条件就能。
2025-01-24 19:59:06
664
原创 洛谷 AT_abc018_4 [ABC018D] バレンタインデー 题解
先枚举每一个老师,如果当前老师选上了,就去枚举学生,在当前这个学生的贡献中加上幸福度。因为是教师送给学生礼物,所以我们先搜索老师,记录下来当前这个老师选还是不选。为了使幸福度最大,所以在算完所有学生的贡献后,我们要对。个贡献进行从大到小的排序,最终在得分中加上前。很小时,就可以直接暴搜。但我们该怎么搜索呢?个老师,学生部分就可以直接算分数。个学生的贡献,因为学生就要选。
2025-01-24 19:52:27
191
原创 洛谷 [NOIP2015 提高组] 跳石头 题解
平时我们解决问题一般是求解,但还有一种叫做试解,其中就有二分试解.但是,二分答案是有限制的!二分答案的时间复杂度约为。这道题目明显就是要用二分答案来求。题目中说“即最短跳跃距离的最大值。可以编写一个check函数来判断当前解是不是正解.如果是正解。这个数组本来就是递增的,有因为当前解不是正解,所以比它大的值。那么就去右半区查询.为什么?因为这个序列本身是递增的而且。题目要求最大的值,所以当然要去右半区找.也不可能是正解,那么只能去左半边找的.化,就说明我们的二分答案就要登场了.否则就去左半边找,为什么?
2025-01-23 11:55:22
690
原创 题解 P11228 [CSP-J 2024] 地图探险 题解
起始点也算被走过,所以可以用一个标记数组,判断当前格子有没有被走过.但因为起点终点,并且走的步数都告诉你了,所以直接模拟就行.第一眼,可能有人回想起 dfs.
2025-01-23 11:49:27
141
原创 洛谷 P11229 [CSP-J 2024] 小木棍 题解
其中, cmp为比较函数,返回数字小的字符串,j为 0 ~ 9 的数字,stk 表示拼当前数字所要用的木棍,pri 为 j 所对应的字符串.处理完后,我们要更新答案,因为我们提前记录每个问题,所以只要在 T 个问题中找有没有一样的题目, 即木棍数相同,然后将答案记录在 res 中。能拼出数字,并且它不是只有 1 个 0,即首位为 0 或 数字为 0 并且 i - j = 6,即可以拼 数字0。,因为 6 根木棍既可以拼 数字6,也可以拼数字0(不在首位的情况),所以我们要特判一下。
2025-01-23 11:48:39
699
原创 洛谷 P5663 [CSP-J2019] 加工零件 题解
看到楼上的大佬好多是用两个数组来记录最短路,我这里用一个二维数组来记录,操作稍微简单一点(空间复杂度基本没变)。的回答,如果路径长度过大,就是 No,否则就是 Yes。所以我们直接求一遍最短路,分奇最短路和偶最短路。阶段的路径,那就不一定了。对于上图,如果我们相知道。阶段的零件,其实是看。
2025-01-23 07:48:37
395
原创 洛谷 P5662 [CSP-J2019] 纪念品 题解
即今天花掉的钱+明天能拿的钱-今天花掉的商品钱.次,所以显然可以使用完全背包.再假设小伟今天买了,明天就卖掉.时,可以拿到钱的最大值.因为小伟可以每天进行。
2025-01-23 07:47:42
920
原创 洛谷 P9751 [CSP-J 2023] 旅游巴士 题解
因为这样不仅可以方便计算,而且题面中说到,到达和离开景区的时间均要是。显然,这题可以使用最短路,我们在求最短路的同时进行转移.关于最短路算法,建议选择优先队列。首先,举一个例子,假如说 小Z 到了入口,但是没到时间,所以没法进去,该怎么办?除此之外,像到了其他景区,但是还没开门怎么办?知道这个后,我们先定义状态。时,路径长度(即时间)的非负整数倍时间呀.
2025-01-22 19:50:07
646
原创 洛谷 P9750 [CSP-J 2023] 一元二次方程 题解
全部取相反值.但这也是有条件的,具体得看题目情况.加 $\bigtriangleup $ 即可.一个未知数,所以我们只需保证。因为求根公式中,分母中只有。
2025-01-22 19:49:23
341
原创 洛谷 P8816 [CSP-J 2022] 上升点列 题解
根据题目中,每个坐标的横纵坐标均单调递增,所以明显可以使用最长上升子序列.目标很好理解,取最大值就行,但初始化设为。就像一维的最长上升子序列一样,然后插。次插入机会,所能达到的最大长度.是因为最简单的方法就是直接插。次插入机会,然后是距离。
2025-01-22 19:45:43
953
原创 洛谷 P8814 [CSP-J 2022] 解密 题解
因为在开根的时候,可能会产生一些不是正解的数,所以只要判断。的值,那么可以再构造出一个二元一次方程,然后构成。三个数后,就可以求出p-q和p+q的值了.前2个条件直接套就行,也就是。所以,最简单的方法就是求出。再把展开后的式子带入。
2025-01-22 19:44:23
942
原创 洛谷 [CSP-J2020] 表达式 题解
一个数是否为0,1,因为它的值可能会影响整个表达式的值.因此,需要构造一。进行与运算时,若其中有一个值为0,则这个运算的结果就为0,即无需判断。进行或运算时,若其中有一个值为1,则这个运算的结果就为1,也无需判断。根据短路的性质,可以得知,在与运算时,如果当前值为1,则需额外判断另。在递归的过程中,可以通过染色,判断这个节点对树的值是否有影响.其中,需要存储节点的编号,值,左孩子,右孩子.这道题目中所含的运算符只有3个:与、或、非.表达式求值,后缀表达式,表达式树,递归。在与运算和或运算中有2个性质.
2025-01-22 19:40:41
263
原创 洛谷 P7074 [CSP-J2020] 方格取数 题解
时,说明小熊要往下方走,或者是右边走,但往右边走不管方向是。个方向:上、右、下.所以可以定义一个三维数组 dp 数组.方格取数类似于数字三角形,均可以使用动态规划直接秒杀.数组中的格子赋一个较小的初值,类似于。这里使用类似于记忆化搜索的方式.值.最后加上当前各自的值.然后将小熊的起点,即坐标。均可以走.所以三者要取。
2025-01-22 19:39:06
715
原创 二进制 GCD 学习笔记
欧几里得算法可以在 log 的时间复杂度内求出 个数的 GCD,但是这还是太慢了。在一些题目中 ,欧几里得算法就会 TLE。
2025-01-22 19:28:55
1647
原创 洛谷 P7071 [CSP-J2020] 优秀的拆分 题解
"优秀的拆分"如果存在,则代表的二进制最低位不是当的二进制最低位为时,不存在优秀的拆分.即不是奇数.上述条件判断完后,就可以从的次方开始模拟( int 的上限是).
2025-01-22 16:29:21
132
原创 洛谷 P7912 [CSP-J 2021] 小熊的果篮 题解
其实是的,虽然,但是队列是个好东西.我们定义一个结构体,来存放每一个块的信息,包括类型、起点、终点,将它们放入队列当中,再使用基于广搜的思想,先处理,再合并,所以需要用到个队列.
2025-01-22 16:22:39
114
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人