![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法笔记
文章平均质量分 58
算法笔记
Angindem
"我明白自己并不是多优秀,只是想在这世界的夹缝中生存着。"
展开
-
小丑的身份证和复印件 (BFS + Floyd)
本题链接:登录—专业IT笔试面试备考平台_牛客网 输出 12 思路: 根据题意,要求最短时间,实际上也可以理解为最短距离。 所以应该联想到有关最短距离的算法,在这里给出的 n,m是100,所以我们可以暴力求最短距离即可,身份碎片虽然分大小写,但是它们都是唯一的点,所以可以通过Floyd,记录每个点之间的最短距离,随后累加即可,其次这里的最短距离可以用BFS求得最短距离。注意一个细节,初始化无穷大的时候,尽量小一些,否则原创 2024-05-09 19:02:05 · 577 阅读 · 0 评论 -
Shuffle Cards (STL rope平衡树库)
本题链接:登录—专业IT笔试面试备考平台_牛客网 输出 2 3 4 1 5 样例2: 输入 输出 3 4 1 2 5 样例3: 输入 输出 3 4 1 5 2 思路: 这道题,其实就是个模拟题,根据题意。 第一行输入,n 为排列数 1~n,初原创 2024-05-08 11:40:07 · 1001 阅读 · 0 评论 -
独有病眼花,春风吹不落。 (二维坐标压缩成一个点,并查集)
本题链接:登录—专业IT笔试面试备考平台_牛客网 输出 8 根据题意,要求连接线段后,操作多少次,连接的线段闭合,如果操作完都没有闭合,说明平局输出“draw”。 在这里,我们可以将线段当作拥有两个点,当我们所画的线段两端的点是头和尾的时候,说明我们画闭合了。所以根据寻找当前点的根结点的时候就是头结点。我们很容易联想到并查集。 这里有个难题就是如何将二维坐标化成一个点的形式存在。我们可以通过映射的方式,由于原创 2024-05-07 21:25:08 · 682 阅读 · 0 评论 -
荷香堪筑梦,鸳鸯和月寻。(变相BFS搜索)
本题链接:登录—专业IT笔试面试备考平台_牛客网 输出 yes 思路: 根据题意,这里 1 s 可以移动多次,我们将每次可以移动避开雪的的位置存储起来,判断当移动到了顶部,说明完全可以避开雪。原创 2024-05-07 20:16:54 · 304 阅读 · 0 评论 -
探索的时光 (整数三分)
本题链接:登录—专业IT笔试面试备考平台_牛客网 输出 28 根据题意,已经给出了运算函数 当我们看到这些函数的时候,联想一下,它们的单调性,以及性质。这是一个抛物线,题目要求我们寻找最小值,说明就是要我们寻找极小值,寻找极值,我们使用三分。原创 2024-04-29 14:53:05 · 382 阅读 · 0 评论 -
P1883 【模板】三分 | 函数
本题链接:【模板】三分 | 函数 - 洛谷 输出 0.00000.5000 思路: 三分,就是将一段区间分成三等份,随后已知缩小中间的一段区间,以达到寻找极值问题。 三分,一般适用于,抛物线性质类的题目,以后遇到关于函数求值类的或者变相的函数求值类的题目,应该联想到三分。 具体的三分逻辑理解,可以参考网上的一些模拟视频:【4K算法详解】【二分与三分】从二分法到牛顿法,领着你的思维带你原创 2024-04-29 13:57:23 · 151 阅读 · 0 评论 -
C. Left and Right Houses
本题链接:Problem - C - Codeforces 思路: 根据题目意思。 寻找一条道路进行分割该字符串,设该道路分割位置为 i ,使得满足以下条件: 1、左侧有 个 0,右侧有 个 1 2、如果有多个位置满足 条件一,我们就要选择最小的位置 . 读懂意思后,暴力枚举一遍即可。通过前缀和记录每个位置 1 的数量,遍历判断以下即可。原创 2024-04-25 17:06:37 · 323 阅读 · 0 评论 -
C. Inhabitant of the Deep Sea
本题链接:Problem - C - Codeforces 输出 2 3 5 0 2 2 数学+模拟。 根据题意,一前一后的攻击,攻击k次后,总共击落舰队多少个。 如果单纯模拟,肯定会TLE,所以要加上数学推导一下。原创 2024-04-24 21:17:13 · 350 阅读 · 0 评论 -
逆数对(树状数组的方法)
逆序对的数量为: sum(2 ~ INF) = 0 + 0 + 1 + 1 + 0 + ... + 0 = 2。就开始询问有多少个逆序对,求总和(x + 1 ~ INF) 的数量是多少。我们可以通过计数的方式,log(n)的时间复杂度获取逆序对。根据题意,求逆序对总数。根据样例已知: 4 5 1 3 2。操作函数看我以往的笔记。原创 2024-04-23 20:53:04 · 442 阅读 · 0 评论 -
L2-1 堆宝塔
本题链接:PTA | 程序设计类实验辅助教学平台 输出 4 5 这是一道模拟题,需要有耐心读题,跟着题目走一遍,就可以了。原创 2024-04-16 18:12:01 · 205 阅读 · 0 评论 -
【模板】差分
本题链接:登录—专业IT笔试面试备考平台_牛客网 输出 5 6 1 一直以来,我总是不太理解差分和树状数组操作区别。 现在摸了一下开始有所理解了。 差分和树状数组的区别: 树状数组:可以边区间插入操作边查询。 差分:一系列区间操作后,最后确定结果序列 设原数组为 a差分数组为 b前缀和数组为 c这里要注意的是,操作差分的时候,+x 前后的关系差分 就是 差分原创 2024-04-16 12:01:11 · 458 阅读 · 0 评论 -
蓝桥杯2024年第十五届省赛真题-R 格式(高精度乘法 + 加法)
本题链接:蓝桥杯2024年第十五届省赛真题-R 格式 - C语言网 输出 13 根据题意,结合数据范围,这是一道模板的高精度乘以低精度问题。 题意是double 类型 d 与 2 的n 次幂相乘,最后四舍五入。 我们换一下视角,看作 对于double 类型 d ,与 n 个 2 相乘,最后四舍五入。 这样就很快解出答案了,就是对于double小数部分需要微调一下即可。原创 2024-04-15 21:47:11 · 1193 阅读 · 2 评论 -
BD202311夏日漫步(最少步数,BFS或者 Dijstra)
IOS;int _t = 1;solve();return 0;int n,ans;// g 记录连接线 cnt 记录可瞬移的点// BFS 求最短路q.pop();++i)if(!return 0;cin >> n;// 记录 所有点i < n;// 记录可瞬移的点// 小度可以正向或反向移动到相邻的格子++j)原创 2024-04-13 21:42:38 · 476 阅读 · 0 评论 -
小红不想做完全背包 (hard)(BFS最少操作)
本题链接:登录—专业IT笔试面试备考平台_牛客网 输出 1 根据题意,要求拿去物品数量的最小值,也可以看作是最少操作拿取的次数。 所以我们应该联想到 BFS 搜索,以后遇到最小值、最少值...这些,再看到数据范围,可以考虑一下 BFS。 这里我们定义一个 Pair 值,其中一个是操作次数,另一个是操作结果,随后用一个 ans[] 存储各个操作结果的次数。ans [ 下标 ] = 值 这里 ans 下原创 2024-04-08 12:26:39 · 315 阅读 · 0 评论 -
L2-036 网红点打卡攻略 ( 模拟题 )
本题链接:PTA | 程序设计类实验辅助教学平台 输出 3 5 11 根据题目意思模拟一遍就可以了。 根据数据范围N原创 2024-04-03 13:05:43 · 221 阅读 · 0 评论 -
L2-035 完全二叉树的层序遍历(完全二叉树+后序推出层序)
IOS;int _t = 1;solve();return 0;//递归边界,以及找到相应的根节点了。// 向上查找 L 左父结点// 向上查找 R 右父结点DFS(l);// 开始向上 L 查找DFS(r);// 开始向上 R 查找// 已经查找到 第 t 个结点,// 开始赋值相应层序遍历的 i 值为后序遍历的 a[t]值cin >> n;i原创 2024-04-03 11:27:02 · 904 阅读 · 0 评论 -
Overcooked!(并查集区间元素合并优化)
本题链接:登录—专业IT笔试面试备考平台_牛客网登录—专业IT笔试面试备考平台_牛客网登录—专业IT笔试面试备考平台_牛客网 输出 YES YES NO 根据题意,这是个模板的并查集,但是多了一个操作,就是合并区间多个元素为一个集合。 其中合并区间多个元素为一个集合的核心是,存一个区间合并的 ne 数组。初始化操作多个元素区间合并操作具体合并优化过程,跟着代码,在草稿纸上模拟走一遍就思路清晰了。原创 2024-03-27 21:00:36 · 302 阅读 · 0 评论 -
Shadow Tactics
本题链接: 输出 YES 根据题意,隼人的坐标是不会动的,并且士兵只能直线来回行动。 从上图,我们可以知道,最短距离路线所对应的某一个(x / y)下标,可以通过隼人的坐标获取,我们只需要判断另一个移动的 (x / y)下标即可。原创 2024-03-27 20:00:18 · 230 阅读 · 0 评论 -
Stardew Valley(到达同一高度最少操作数)
本题链接:登录—专业IT笔试面试备考平台_牛客网 输出 2 根据题意,要求选取一段区间 +1 ,使得序列单调递增。求最少操作数。我们选取区间 + 1 是为了不超过前面的最大,所以我们累加比上一次的区间的差值即可。举例:原创 2024-03-27 12:20:44 · 197 阅读 · 0 评论 -
Prototype
根据题意, 吸收怪物是 w * n ,其中 怪物 n 一定是质数,并且 AlexMercer 可以变成 w 的任一因子。从中我们可以知道,这是将 w 分解成质因数,然后累乘即可。原创 2024-03-27 12:00:32 · 463 阅读 · 0 评论 -
L1-2 倒数第N个字符串
本题链接:PTA | 程序设计类实验辅助教学平台 根据题意,这道题是一道思维模拟题。 给出 n 位的小写字母字符串,其中进制位为 26 ,求进位+1 到 倒数第 N 个后的字符串是哪一个。 这里解决两个核心问题即可: 1、其中求 到倒数第 N 个的字符串,第几个字符串。 2、这里涉及到 高精度模拟 进位 + 1 的步骤。1、结合排列特性,即可获得顺着的第 n 个字符串的 n 是多少:2、参考高精度加法,高精原创 2024-03-26 20:30:39 · 441 阅读 · 0 评论 -
P3386 【模板】二分图最大匹配
本题链接:【模板】二分图最大匹配 - 洛谷 根据题目意思,我们由之前提及到过的二分图含义明确一下。 二分图就像是一个人群中的男女混合舞会,所有参与者可以分成两组:男生和女生。在这个舞会上,男生只和女生跳舞,而不和其他男生跳舞;女生也只和男生跳舞,而不和其他女生跳舞。没有两个男生或两个女生会成对跳舞。只存在一对一个的关系。 换句话说,如果一个图是二分图,就意味着可以将所有的点分成两组,使得同一组内的点之间没有直接相连原创 2024-02-27 17:40:25 · 389 阅读 · 0 评论 -
AcWing 860. 染色法判定二分图
int n,m;// 数组模拟链表// 链表头指针// 记录是否染色// color 状态 0 表示未染色// 1 表示染黑色// 2 表示染白色// 存储需染色结点// 枚举每个结点i原创 2024-02-27 11:14:36 · 337 阅读 · 0 评论 -
集合问题(并查集)
本题链接:登录—专业IT笔试面试备考平台_牛客网 这道题关键点在于。 当集合中有一个元素均存在于集合 A 和集合 B 的时候是 NO。 并且 的范围是 1 ~ 1e9 所以,当 >= max(a,b) 的时候也是 NO。 我们同时可以指定一个 元素范围外的 一个元素作为 根元素集合 A 其次,我们可以将 下标 作为对应的每一个元素,最后进行合并求结果即可。最后提交:原创 2024-02-01 23:39:43 · 536 阅读 · 0 评论 -
高精度加法模板,包装结构体
本题链接:用户登录 思路: 大整数,高精度,运算原理跟我们小学进行的笔算原理一样的,模拟一遍即可。原创 2024-01-31 12:07:00 · 319 阅读 · 0 评论 -
小红的回文串构造
本题链接:登录—专业IT笔试面试备考平台_牛客网 由题意,题目保证给出的字符串是回文串的,所以我们只需要获取两个不同的字符的对应对称的两个坐标进行交换即可构造完毕。 这里有一个关键点,就是我们如何知道当前的下标 i 的堆成下标是多少? 关于 i 对称的下标,肯定有一个规律关系,其中对称又有两种方式。 其中奇数串对称: 观察对应的下标 i 就可以找出一定的规律为 :原创 2024-01-29 15:34:16 · 570 阅读 · 0 评论 -
模板笔记 ST表 区间选数k
本题链接:用户登录 . 根据题意,给出数组,以及多个区间,问这些区间中,最小值之和 和 最大值之和,分别是多少。 由于题目中的数组元素是静态性的,典型的 RMQ 问题,给出元素,以及区间,进行询问即可。当然这里也是可以 使用 线段树进行求解,由于这道题是静态性的,所以我们可以直接使用 ST 表 的数据结构,进行求解即可。线段树 的方式 是 可以解决动态性的 ,也可以解决静态性的,即线段树可以 边修改元素边询问。ST 表 的方式 是 对口静态性的, 即 只能原创 2024-01-29 02:32:29 · 1109 阅读 · 0 评论 -
dp专题18 最长上升子序列
本题链接:晴问算法 根据题目意思,求出最长上升子序列,不是递减的序列。 从中,由于是上升的子序列,所以我们只能从头到尾的选取。 这里我们明确一下 dp[ i ] 的含义,由于我们是从头到尾的选取,寻找最长的上升子序列,所以我们确定 dp[ i ] 含义就是当前下标 i 的最长上升子序列长度是多少。其中 i 就是原数组的下标位置。 所以得出一个 for 循环 又因为我们是从头到尾的一个一个进原创 2024-01-27 13:41:27 · 316 阅读 · 0 评论 -
manacher算法 求最长回文串
本题链接:用户登录 根据题目意思,求出最长回文串,我们可以用模板 manacher 算法 求最长回文串。 manacher算法 求最长回文串 核心有两个步骤。 一、将字符串转化为 奇数 长度的字符串,方便我们求回文串。 二、利用回文串对称性的特点,推导最长回文串长度。 根据我们的核心开始一步一步来。 我们把每个字符作为回文串的中心去处理。 我们只要在每个字符中间加入一原创 2024-01-23 14:46:14 · 788 阅读 · 0 评论 -
DP专题17 单词拆分
本题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 由题意,根据题目意思,给出字符串 S,以及一个字符串数组,问字符串数组中 是否可以任取字符串拼成字符串 S。 根据这个题目,我们可以看成完全背包问题,又因为我们选取的字符串 可以不在乎顺序的进行选取,所以我们用 排列数的遍历方式,总结下来: 完全背包问题+排列数遍历方式 这里题目要求的是判断是否可以拼成字符串 S, 所以我们 dp 数组可以为 bool 类型的dp数组,原创 2024-01-22 21:38:03 · 817 阅读 · 0 评论 -
dp专题16 完全平方数
本题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 这道题与 前面写的零钱兑换一样的思路,只不过,这里需要我们自己添加物品。原创 2024-01-19 17:37:34 · 401 阅读 · 0 评论 -
dp专题15 零钱兑换
本题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 这道题,是个比较模板的完全背包问题,这里要求的是问凑成总金额所需的最少的硬币的个数。我们明确一下 dp[ i ] 的含义,是 dp[ i ] 存储的是凑成总金额所需的最少的硬币的个数。其中 下标 i 的含义是 "背包容量" amount , 并且不同金额中是有无限个的。所以我们可以将,不同金额硬币作为"物品体积",每个硬币价值都为 1 表示物品的数量。其次我们也要分析 dp 数组的初始化,由于 要求所需最少的硬币个原创 2024-01-19 17:01:37 · 429 阅读 · 0 评论 -
dp专题14 爬楼梯(进阶)
本题链接:题目页面 输出 3 这是个 完全背包 + 排列数选取方法的dp问题。需要注意的是初始化 0 和 1 都为 1.原创 2024-01-18 12:26:46 · 386 阅读 · 0 评论 -
dp专题13 零钱兑换II
本题链接:. - 力扣(LeetCode) 根据题意,这是一道很裸的背包问题,其中这里是返回 背包方案数 的。我们可以直接推出公式 : dp [ j ] += dp[ j - coins[ i ] ]在我之前做的笔记中,写过具体的背包方案数dp公式,参考我之前的详解即可:dp专题10 目标和 最后我们再明确一下题目,题目要求是 硬币数量是无限的,说明这是一个 完全背包问题。完全背包问题 和 01 背包问题区别在于 遍历背包的顺序。01 背包的 背包 遍历顺序: 逆向。完全背包的 背包原创 2024-01-16 15:36:22 · 367 阅读 · 0 评论 -
dp专题12 多重背包问题的二进制优化
本题链接:5. 多重背包问题 II - AcWing题库 对于朴素版的多重背包问题DP,由于朴素版的多重背包问题DP是三层循环,所以合适范围数据范围是在100左右,当数据范围再多 一个 10倍的时候,朴素版的多重背包问题就会 TLE 了。 朴素版的多重背包问题,原理的三层循环中,有一层循环是作为取多少个当前这个物品的原理,达到完成dp状态的转移。 我们二进制优化这个朴素版的多重背包问题,就是优化掉我们 取多少个当前这个物品 的这一层循环。原创 2024-01-15 17:59:01 · 406 阅读 · 0 评论 -
dp专题11 一和零
本题链接:. - 力扣(LeetCode) 由题意,这里有两个特征,要求满足选取的字符串总和中,0的个数和1的个数分别不超过m个0 和 n个 1,问选取的字符串最多有多少个。 又是典型的背包问题,这里我们选取的个数变成了两个,所以这是个二维dp其中我们明确一下 dp[ i ][ j ] 的含义是我们选取的字符串数量,即价值为 1 ,将 n 和 m 作为背包容量即可。最后提交:原创 2024-01-12 16:39:38 · 409 阅读 · 1 评论 -
dp专题10 目标和
本题链接:. - 力扣(LeetCode) 根据这道题,可以通过暴力的方法进行取 + 号或者 - 号 两个操作,通过当刚好得到 target 的时候 答案 +1,但是通过长度是 20 ,操作状态为 2个,随后的回溯暴力递归,最坏的情况时间复杂度大约是 20^20^2 ,肯定会TLE了。 这时候就用到了动态规划dp,这里我们可以知道有两个操作 + -,我们分成两个子集,一些放正号子集 left,另一些放负号子集 righ。最后得到 : left + righ = sum原创 2024-01-08 16:51:15 · 336 阅读 · 0 评论 -
DP专题9 理解01背包问题
本题链接:晴问算法 对于 01 背包问题,我们需要明确 DP 数组的含义,这里 经典的 01 背包问题可以用 二维DP进行表示。 即: dp[ i ][ j ] , 其中 i 表示的是 物品编号 j 表示背包容量 , dp[ i ][ j ] 表示最大价值01 背包的递推公式为 :递推公式的含义是原创 2024-01-06 20:32:07 · 357 阅读 · 0 评论 -
全面 正进制数转化 函数模板(直接调用)
最后再给一个,大整数的情况下的进制数转化:可能会超时,但是还是挺好玩的。// 字符串 大整数 加法模板i > -1;i > -1;int t = 0;i > -1;// 大整数除法模板i < alen;r = 0;i < alen;++i)r %= b;i > -1;return ans;if(bit!原创 2024-01-05 15:42:38 · 385 阅读 · 0 评论 -
dp专题8 1049. 最后一块石头的重量 II
本题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 由题意,石头的相撞,求最后相撞后剩余的最后一个石头最小的重量是多少。看到题目的这里,都往取哪些石头的方式去想了,我们不如换个思路,将这堆石头分成两堆,其中一堆尽可能的石头之和,为总石头之和的一半那边靠,然后将这两堆石头相撞,剩余的就一定是重量最小的石头了。 所以归根结底,还是背包问题,将 总石头之和的一半作为背包容量,另一堆重量 为 sum - dp[sum / 2]; 最后相减即可。原创 2024-01-03 15:12:40 · 405 阅读 · 0 评论