自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 笛卡尔树[天梯赛二叉树专项训练]

【代码】笛卡尔树[天梯赛二叉树专项训练]

2024-04-05 11:44:31 406

原创 树的同构[天梯赛二叉树专项训练]

④除上述三种特殊情况外,进一步递归判断第一棵树和第二棵树的左右孩子是否相同或交叉相等。1.用结构体数组模拟二叉树–由于题目中给定节点值均不相同,因此这种方法可取。2.建树时,存储每棵树的根节点,后序判断是否同构时,从根节点开始判断。3.Compare函数判断两棵树是否同构。③两棵树均不为空,但是值不相同–不同构。②一棵树为空,一棵树不为空–不同构。①当前两棵树均为空树–同构。

2024-04-04 21:18:04 264

原创 完全二叉树的层序遍历[天梯赛]

后序遍历的顺序为"根左右",我们可以用数组模拟完全二叉树,从节点1开始寻找,寻找每一个树的根对应的下标,进行输出,最后输出,即为层序遍历的结果。完全二叉树最后一层可以不满,但上面的每一层的节点数都是满的。

2024-03-27 20:10:14 492 1

原创 讨伐[天梯赛训练]

1.对于每一个点,其权值对应的二进制数1的个数为x,由于题目中给出节点的编号范围是1~2e5,因此设置一个偏移量2e5,建立虚拟节点(范围为2e5 + 1 到 2e5 + 30,因为权值最大为1e9,在这个范围内,二进制数表示中最多有30个1。②由于 -x 是 x 的补码表示的负数,其特点是除了最低有效位以外,其他位与 x 相同,最低有效位则从0变为了1。2.建立i点到虚拟节点的单向路径,因为虚拟节点并不存在,所以是单向路径,否则会将本不存在的路径加入最短路径中。3.建立m条确定存在的双向路。

2024-03-27 19:58:58 466

原创 通信网络设计[PTA]

n - 1,说明不能实现所有村庄互联,这时需要找到所有以自己为祖宗节点的村庄,便于查找有多少个连通图,用vis标记以自己为祖宗节点的村庄,并用ans数组存储每个连通图内的村庄。并查集中find函数找的是祖宗节点,p数组存的是父节点,p[i] 不一定等于find(i)1.执行一遍kruskal算法,用res存储花费,用cnt存储加入最小生成树的边数。①cnt == n - 1,说明加入n条边,共n个点,则可以实现所有村庄互联。最小生成树–kruskal算法。2.判断加入集合的点数。

2024-03-23 18:06:16 345

原创 小字辈(左子右兄加强版)

相较于小字辈,该题多了一步对兄弟节点的遍历欢迎大家批评指正!!!

2024-03-23 16:39:06 375

原创 一笔画--PTA

欧拉通路就是从点①出发,到点②,(①②不一定相同)经过该连通图所有路径仅一次;欧拉回路就是点①和点②一定相同。

2024-03-23 16:09:33 1036

原创 小字辈[天梯赛]

2.从pos开始dfs,每次判断当前遍历的深度,如果>原来的深度,更新,并将存储最小辈分的数组清零;如果=原来深度,则将当前的人加入数组;之后继续搜索该人对应的孩子。1.读入每个人的祖先,标记辈分最高的老祖宗对应的下标pos。

2024-03-20 20:37:59 271

原创 冰岛人[天梯赛]

①依次遍历每个人的祖先,判断五代内是否有公共祖先,如果超出五代,或者祖先不足5代(不管相同还是不用),则可以交往;1.结构体存储每个人的信息,包括父亲的姓名(只针对维京人后裔)以及每个人的性别。2.用map存储每个人姓名到其结构体信息的映射。1.判断两人是否都存在 – 一定要首先判断。3.判断两人是否五代内有公共祖先。2.判断两人性别是否相同。

2024-03-20 19:25:42 753

原创 天梯赛的赛场安排[天梯赛]

②stu_num < c,搜索已有房间,用flag标志是否有可用房间,如果有将其放入,否则开辟新房间。最后将该学校的未安排人数置零,联系监考老师+1,不用再次入队。①stu_num >= c,开辟新房间,更新学校人数,联系监考老师+1,如果在安排后该学校仍有未安排进考场的学生,则再次将其入队。1.用结构体数组存储学校信息,包括学校编号,姓名,联系的监考老师数量。2.用优先队列存储每个学校的人数及其编号==(优化排序的复杂度)==2.判断当前学校的人数stu_num与教室最大容量c的关系。

2024-03-19 21:52:09 467

原创 那就别担心了[天梯赛 -- 深度优先遍历]

3.如果本次dfs结束,本次距离仍未0,表示从x不能推理到终点,即不为逻辑自洽,flag置为false。2.否则,遍历所有命题,找到可以从当前命题推理过去的,加到本次距离上。1.如果当前点在之前已经被搜过了,直接返回其距离即可。2.用dis数组存储从下标为i的点到终点的距离。dfs具体流程,返回值为从x开始,到终点的距离。1.用二维数组g存储命题间的关系。3.用flag标记是否为逻辑自洽。

2024-03-17 09:55:04 213

原创 拯救007[天体赛 -- 深度优先遍历]

2.不断取出队首元素,判断从当前点是否可以跳到边界,如果可以,结束bfs;否则,遍历所有鳄鱼,找到没有被踩过,且可以从当前点过去的,将其入队。1.用一个结构体数组存放鳄鱼的坐标及其距离池心岛的距离。1.首先将可以从池心岛中心(0,0)一步到达的鳄鱼入队。题目大意:从池心岛中心(0, 0)跳出鳄鱼池。2.用vis数组存储每一只鳄鱼被踩过的情况。

2024-03-17 09:09:59 242

原创 迷宫寻路[天梯赛 -- 栈]

需要对每一条路径上的点进行保存(用temp数组),当找到一条更短路径时,保存其长度,用于后面的遍历中比较;当找到终点时,我们将temp数组中的结果赋值给res数组。

2024-03-15 19:34:27 501

原创 表达式转换[天梯赛 --- 栈]

①+ 或 - ,需要是不是在表达式开头出现,如果是,则该“运算符是数字的”;如果前一位不是数字,且不是右括号,则运算符也是数字的;除此之外,运算符就是单纯的运算符,直接入栈即可,但要保证栈顶到栈底的运算符优先级为单调递减。1.数字:继续向后判断,直到找到不是数字的且不是小数点的 —>多位数字 和 小数。②* 或 /,直接入栈,但要保证栈顶到栈底的运算符优先级为单调递减。具体流程中提到的:“运算符是数字的”表示形如-1这类的情况。4.右括号,弹出一对括号内的字符。栈内只存放字符,数字直接输出。

2024-03-13 22:14:36 336

原创 银行排队问题之单队列多窗口服务[天梯赛 -- 栈和队列]

存储结构:使用结构体,存储每一个客户的到达时间和处理时间==(最大为60,大于60的,按60处理)==;用两个数组分别存储每一个窗口的办理人数 和 该窗口结束上一次处理的时间点。①如果存在一个窗口,该窗口上一次结束处理的时间 <= 客户到达时间,则客户不用等待,则更新该窗口的处理结束时间和处理人数。2.如果本次客户需要等待,用之前找到的最短等待窗口,更新该窗口的处理结束时间和处理人数,计算总的等待时间。②如果不存在,则需要找到结束最快的一个窗口,标记其窗口编号和处理结束时间(用于计算该客户的等待时间)

2024-03-13 14:15:20 427

原创 特殊堆栈[天梯赛 -- 栈]

存储结构,用一个栈和vector容器分别存储入栈的值,栈用于删除和返回栈顶元素,vector用于求中值。对于栈,直接pop。然后找到其在vector中的对应位置,将其删除,保持vetcor单调递增。对于栈,直接push。然后找到其在vector中的对应位置,保持vetcor单调递增。①lower_bound函数,寻找一个数的左边界,即第一个>=它的值。②vector 中insert和erase能够插入和删除指定位置。按照题目要求,返回vector对应下标的值即可。

2024-03-11 20:44:45 200

原创 列车厢调度[天梯赛 -- 栈]

存储结构:用三个栈存储三条轨道上的列车顺序,初始情况下,①轨道上按照从左向右的顺序入栈,②轨道上按照从右向左的顺序入栈。1.如果当前①栈的栈顶元素和②栈的栈顶元素不相同,则将其转移到③轨道上,否则将其转移到②轨道上。3.最终,如果①、③轨道都空的话,说明可行;如果①空,但③不空的话,说明不可行。2.判断③轨道栈顶元素是否与②轨道栈顶元素相同,是,则直接转移到②轨道上。

2024-03-11 19:49:29 178

原创 求前缀表达式的值[天梯赛 -- 栈]

2.接着,遍历栈,判断当前栈顶元素是运算符还是数字。这里我们用栈顶元素的长度来判断。①使用stod函数的好处,不管数字为正数,还是负数,都可直接将字符串转换为相应的数字。①如果长度为1,则可能是一位数字(直接加入存放数字的栈,但这之前要使用。1.首先,用一个栈将所有的数字和运算符以字符串的形式存储下来。函数将字符串转换为浮点数字),或者是运算符(直接计算)如果长度不为1,则肯定是数字,直接入栈即可。②注意判断进行除法时,除数不能为0。

2024-03-11 19:16:13 220

原创 滑动窗口[Acwing]

1.由于单调队列的队首元素为最小值的下标,因此,我们需要确保队首元素在当前判断区间内。如当前遍历到下标i,则整个区间的下标范围为[i - k + 1, i],因此需要将不符合要求的元素删除。维护一个单调队列,使其单调递增(队首为最小值) 或 单调递减(队首为最大值),我们可以在O(1)的时间内求出给定区间的最大(小)值。2.为了确保队列是单调递增的,在加入新元素之前,需要将所有大于新元素的值删掉。前期准备:用a数组存放数据,用q数组模拟单调队列,且。3.如果队列不空,则最小值即为队首元素对应的值。

2024-03-09 11:31:11 311

原创 简单密码构建

密码为6位数字,我们只需要将对应位置的数字求和,再将其按照规定变为一位数字即可。在给定的字符串中,下标为i的字符,对应贡献的位置应为i%6。

2024-03-03 09:15:59 130

原创 龙龙送外卖[天梯赛]

我们记sum为需要送外卖的点之间不同的路径,题目要求我们最后不必返回外卖站,我们可以先假设最后返回外卖站,则这样的距离就是sum * 2,最后不返回,我们就减去最后一个外卖店距离外卖站的距离,即为d,这样最后的结果为sum * 2 - d,当d最大时,求解的即时最小的。采用记忆化搜索,可以防止我们处理重复点时,重复搜索。

2024-03-02 18:41:42 248 2

原创 区间和--离散化

求解问题为给定区间的和,且求解的整个区间已经是固定的(对数轴上每个点的操作在之前已经全部完成),这样我们只进行一次前缀和,之后便可以在O(1)的时间复杂度内访问给定区间内的和。题目给定的数轴上的数据范围为-1e9~1e9,跨度为2e9,如果用数组数轴上的每个点都存储下来,需要开2e9的数组,肯定会爆内存。但是,我们可以看到,访问的区间最多有10。首先我们需要对操作的所有区间端点进行排序和去重,去重的目的是了使每一个端点都对应唯一的映射值,排序是为了让区间端点映射后的值不改变相对位置。

2024-02-29 21:05:29 349

原创 老板的作息表[天梯赛]

③判断从第二个开始的区间,如果当前区间的尾端点,比我们先前合并的区间首端点小,说明两个区间没有重合,则将先前的区间保存下来,并将新的区间端点,更新为当前我们判断的区间;否则,区间有重合,合并区间,更新尾端点。①将存储结构中的数据存好之后,首先对vector数组进行排序,由于vector的元素是pair,使用sort,默认按pair的first由小到大排序。②初始化区间端点为负无穷,即没有区间,这样我们可以更新第一个区间。②map,存储每一个时间端点和其转化为以秒为时间的映射。

2024-02-29 17:47:08 363

原创 插松枝[天梯赛]

3.如果从盒子内拿完后,仍然没有达到最大容量,则接着从传送带上拿取。此时需要保证传送带上面有松枝片,然后如果当前松枝上为空,则直接插上;否则需要判断当前传送带首段松针片是否

2024-02-29 16:51:35 281

原创 清点代码库[天梯赛]

2.题目要求我们从大到小输出,但set不方便倒序遍历,因此,我们可以将pair数对的一维,即first,用其相反数存储,这样越大的数字,反而越小,就会排在越靠前的位置。具体做法如下:我们利用set可以自动去重排序的特点,将每一种结果及其对应的种数先用map存储,然后遍历map中的结果,将其存进set容器中。1.map和set的类型,map为结果映射种数,set为种数映射到结果的数对类型。此外,数对先按照first排序。vector容器自带比较,可以直接利用=判断是否相同。

2024-02-28 20:37:41 197 1

原创 口罩发放[天梯赛]

1.首先判断其身份证号是否有效,如果有,先将其视为可以领到口罩的人,加入本次的p数组,同时需要判断其身体状况是否为1,是否出现过,如果符合上述两种情况,加入ans数组。2.判断间隔天数时,判断条件应为当天 - 上一次领取时间 > 间隔时间,而不是当天 - 上一次领取时间 == 间隔时间 + 1, 因为有可能间隔好多天才再次领取。1.身份证号是唯一凭证,统一身份证号一定对应同一个名字,但同一个名字不一定对应同一个身份证号。3.遍历排序好的p数组,判断每个人是否有获得口罩的资格,如果有,将其加入res数组。

2024-02-26 20:38:20 310 2

原创 完全二叉树的层序遍历(天梯赛)

用数组模拟树,pos的树根下标,2 * pos为左子树树根下标,2 * pos + 1为右子树树根下标,从树根(1)开始递归,依次输入当前下标对应的值,最后输出即可。后序遍历遵循“左右根”的顺序。

2024-02-25 20:30:25 158 1

原创 彩虹瓶(天梯赛)

1.是,当货架上有瓶子时,不断判断货架顶部是不是我们需要的颜色,直到货架为空,或者货架顶端不是我们需要的颜色。2.不是,则将该瓶子放到货架上,并判断是否超出货架最大容量。判断当前瓶子是否装着需要的颜色。

2024-02-25 19:56:57 306 1

原创 附近最小[蓝桥杯]

文章目录题目描述方法一:暴力枚举(过80%数据)思路代码方法二:单调队列思路AC代码相关题目方法三:ST表AC代码相关题目题目描述方法一:暴力枚举(过80%数据)思路枚举每一个序号i所对应的范围[i - k ,i + k],不断更新最小值代码#include <iostream>using namespace std;const int N = 1000010;int a[N];int n, k; int main() { cin >> n; fo

2024-02-22 18:16:01 384 1

原创 ST表详解

ST表可在O(nlogn)的时间内,查询到给定区间的最值,速度非常快。但缺点时,该过程中,整个数组的元素不能发生变化,否则,每发生一次变化,就要进行一次初始化欢迎大家批评指正!!!ST表模板题附近最小。

2024-02-22 18:14:38 1053 1

原创 滑行[蓝桥杯]

枚举每个点为起点的情况,一共需要枚举n*m个点,传统的dfs最坏情况下会迭代每一个点,因此传统的dfs时间复杂度为O(n。本题也是动态规划的思想,实质上与记忆化搜索相同,AC代码中未注释的dfs为记忆化搜索,注释的为动态规划。因此,采用记忆化搜索,将每个点滑行的最远距离存下来,在后序迭代到该点是,直接调用前面的结果即可。),n为100,有超时风险。

2024-02-22 10:26:08 144 1

原创 倒数第N个字符串[天梯赛]

给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, …如:l = 3, aaa~zzz共pow(26, 3) = 17576种情况,aaa对应的十进制数为0, zzz对应的十进制数为17575.假设aaa对应的十进制数为1,则结果会往后多一个,这样还需要做其他处理, 比较麻烦。这里需要注意,每一个组合的下标从0开始,一直到pow(26,l) - 1。

2024-02-21 17:46:39 310 1

原创 带分数[蓝桥杯]

首先求出1~9的全排列,对于每一种排列情况,用两个指针i和j划分出a, b,c,判断是否满足n * c = a * c + b。n = a + b / c等价于n * c = a * c + b。

2024-02-21 17:00:36 248 1

原创 打印十字图[蓝桥杯]

根据轴对称的性质,按照以上两种思路打印一半,然后另一半复制即可。纯模拟,可以有三种做法。

2024-02-21 16:21:28 346 1

原创 等腰三角形[蓝桥杯]

1.打印腰,共n-1行,定义一个指向字符串的头指针和尾指针,分别用于打印左腰字符和右腰字符。首先计算等腰三角形的周长,将其所需的字符用一个字符串存储,然后一行一行打印。2.打印底,共一行,长度为2n-1。

2024-02-21 09:45:18 321 1

原创 列车调度[天梯赛]

在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果需要最少的轨道数,则让每一条轨道上相邻的列车差值最小,即对于某一辆待进站的列车,假设其进入第x条轨道,我们要保证第x条轨道上最左侧列车的编号与其差值最小(相较于其他轨道最左侧列车。由于我们每次新增轨道时,都是在新进入的列车编号大于所有轨道最左侧列车编号,因此我们维护的数组一定是单调递增的。因此,我们用一个数组维护每一条轨道最左侧列车的编号,当有一辆新的列车进来时,我们找到其对应的位置。使用二分查找的合理性。

2024-02-20 18:08:10 343

原创 螺旋矩阵[蓝桥杯]

定义上下左右四个边界,从左上角开始,按照右、下、左、上的方向依次遍历即可。

2024-02-20 17:30:43 119

原创 图形排版[蓝桥杯]

插入图片的过程中,一张或几张图片可以恰好填充一行(有些图片可能经过压缩),我们可以预处理来这样的结果,即以某一张图片为开端的图片的排版结果,这样当我们枚举过程中发现当前图片恰好可以填充一行,则后面的图片我们直接调用预处理的结果即可。2.当该图片的宽度>当前行的宽度,我们将图片进行压缩,并放入当前行。至此所有图片全部排版完成,总高度为每一行的高度之和,即5 + 1 + 5 = 11。模拟每一张图片被删除的情况,计算每一种情况的总高度,取最小值。1.当该图片的宽度<=当前行的宽度, 我们将其放入当前行。

2024-02-20 16:58:40 862

原创 功夫传人[天梯赛]

样例对应的关系树如下,编号为4,7,8,9的人为得道者,假设距离祖师爷为x,则每个得道者对应的功力值为:祖师爷的功力值 * pow(r, x) * 功力放大倍数。如果当前编号对应的人有子节点(徒弟),继续找子节点(徒弟)的子节点(徒弟),直到找到叶节点(没有徒弟的人),则该点对应的人是得道者,将其功力值加入最后结果。将每个人的关系用树表示,具体存储存储每个人的徒弟,以及得道者的功力放大倍数。从祖师爷(第0代)开始。

2024-02-18 19:58:00 194 1

原创 多项式A除以B[天梯赛]

【代码】天梯赛训练。

2024-02-18 17:20:24 212

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除