自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法题(202):乌龟棋

还有要注意状态转移方程中有类似a-1,b-1等数组访问,为了防止非法访问我们需要确保使用对应公式的时候a/b/c/d >= 1。假设是通过值为1的牌,那么我们i位置的分值就是i位置分值+使用了a-1张1,b张2,c张3,d张4的总分值,即如图所示。f[a][b][c][d]表示分别使用了abcd张值为1234的卡牌后到达i位置的最大分值。本题需要我们找到使用完所有卡片后小明所能得到的分数的最大值。因为没使用牌走动的时候得到的分值就是起点的值。分为四类,是根据牌的值种类划分的。我们以最后一步来分析。

2025-09-08 16:40:00 81

原创 算法题(201):传球游戏

由于求的是f[i][j],也就是传了第i次到达j位置的,所以是从传了i-1次的左右相邻同学传递而来。然后根据经验,我们可以尝试初始化为1,然后对填表进行一两行的模拟,判断是否会出问题。直接输出f[m][1],因为题目要的就是经过m次传球后给到第一位同学的总方案数。根据状态转移方程:我们的f[0][1]不能初始化为0,否则所有的值都会为0。本题需要我们找到经过m次传球后球回到编号为1的同学手里的所有方案数。由于传球只能左右传递,且同学们围成圆形,所以分为两大类。经过模拟尝试,发现确实要初始化为1。

2025-09-07 19:43:09 138

原创 算法题(200):最大子段和(动态规划)

他们可以看成前面的子段+自身,而前面的子段都是以i-1为结尾的子段,f[i-1]就是前面的子段和的最大值。所以第二类的子段中子段和的最大值一定是f[i-1]+a[i]由于最后需要的是所有子段中的最大子段和,所以我们需要遍历f数组,维护一个最大值并输出,ret初始化为f[1]即可。由于我们的f[i]依赖与前一个f,所以我们为了正确填写f[1],需要初始化f[0]=0。综上:状态转移方程为max(f[i-1]+a[i],a[i])本题需要我们找到给定数组中的连续子段和最大的值。那么它的子段和就是a[i]

2025-09-06 21:01:31 346

原创 算法题(199):台阶问题

从最后一步来看,f[i]是其前k个台阶的方案总数累加,而k是题目输入的,所以我们需要用for循环来进行累加,在累加过程中需要同时进行取模100003的操作,不能只在最后进行一次取模操作,因为中间可能会出现数据溢出。我们先通过枚举发现f[1] = 1,f[2] = 2,所以我们的f[0]就要初始化为1。本题是上台阶问题的进阶版,他的上楼梯步幅不再确定为1~3,而是通过题目输入来确定。由于我们的步幅可能为k,所以访问的时候确保i-k >= 0。题目需要的就是第n个台阶的f值,直接输出f[n]即可。

2025-09-04 14:59:45 186

原创 算法题(198):数字三角形

如果题目的数据范围包含负数,那么我们就需要用最小的负数(-0x3f3f3f3f)来初始化所有值,以确保最大权值路径不会是不存在的那外围一圈。由于题目要求的是所有完整路径中的最大权值,所以我们最后还要遍历最后一行的所有f值,然后维护一个最大的值并输出。由于我们的f[i][j]计算依赖于f[i-1][j-1]和f[i-1][j],所以会有部分位置出现越界访问。即:f[i][j] = max(f[i-1][j-1],f[i-1][j]) + a[i][j]本题需要我们找到数字三角形中的最大路径总值,并输出。

2025-09-03 23:09:18 402

原创 算法题(197):下楼梯(动态规划)

由于移动距离为1~3,所以我们走最后一步到第n个台阶共有三种走法,分别是一步,二步,三步到达台阶n。故到达台阶n的路径就可以分为三条,第一条是最后走一步到台阶n的f[n-1]这里的表指的是dp表,也就是f[N]数组,由于我们是需要当前台阶的前三个台阶的f值累加求出当前台阶的f值,所以是从左到右进行计算与填写。由于上台阶和下台阶的过程是可逆的,所以上台阶和下台阶的方案数是一样多的,我们将下台阶变为上台阶来解决。本题需要我们输出台阶数为n时一共有的走台阶方案。第二条是f[n-2],第三条是f[n-3]。

2025-09-02 20:18:42 428

原创 算法题(196):最大异或对

第一个数01101011是确定的数,我们遍历数据而得,为了和max值更接近,我们的数2必须要和数一对应位置的数相反,这样子进行异或操作才能得到1.tr数组:表示字典树结构,由于每个数的二进制表示有32位,所以字符规模是N*32,而字符类型只有0和1,所以字符类型的规模为2。path取出来的是数一的数,而我们优先需要的是数一的数异或的数,所以先判断path^1的路径是否存在。取出倒数第二位的数:将该数往右移动一位,然后与1进行按位与操作,从而将1取出。对于1的情况,我们将1给到ret的对应位。

2025-08-31 17:43:07 433

原创 算法题(195):点名

本题可以先将所有字符串存储到某一种数据结构中,然后此数据结构可以完成字符串次数与字符串本身的关系绑定(key—value类型),我们查看字符串出现次数。其二是查询字符串是存储的字符串的前缀,此时for循环可以正常结束,但是该字符串其实是不存在的,需要特殊判断。由于a是ab的前缀,所以for循环可以正常结束,而此时三种情况都可能出现,所以我们要用。本题需要我们判断字符串的查询状态,并根据不同查询状态输出不同的结果。(1)初次查询:为1输出OK,然后将次数改为-1。(3)重复查询:为-1就输出REPEAT。

2025-08-30 17:05:56 220

原创 算法题(194):字典树

如果直接使用memset来清空数组数据会导致超时,因为总共的字符数可能有3e6,然后存储的字符类型又有62,如果全部遍历一次清空数据,那么他们乘起来的结果是1e8级别,会导致超时。那么我们其实可以只将使用过的tr数组数据清除,因为idx表示最后一个使用到的节点的索引,我们只要将idx个节点的数据清空即可。因为“ab”的插入路径和“abcd”的路径是重叠的,所以我们需要用一个end数组负责记录结束在某个节点的字符串的个数。我们用树的边来表示字符串的字符,一整条路径的字符放在一起就表示一个字符串。

2025-08-29 20:42:38 592

原创 算法题(193):兔子与兔子

而如果我们在每次计算的时候都再计算一次P^(r-l+1)会导致时间复杂度变高,我们可以在进行前缀哈希计算的时候将p的n次方用一个数组来表示并计算,p[1]表示p的1次方。中已经讲解过前缀哈希值的求法,接下来我们直接分析如何在有前缀哈希数组的情况下求出某段区间字符串的哈希值。可以发现,在这种情况下“abc”的哈希值-(“a”的哈希值*P^2)== “bc”的哈希值。抽象为通式:f[r] - f[l-1]*P^(r-l+1)

2025-08-28 11:39:31 227

原创 算法题(192):字符串哈希

本文介绍了使用字符串哈希方法来统计不同字符串类型数量的解题思路。通过将字符串转化为P进制数(P=131),利用前缀哈希法计算每个字符串的哈希值,并存储在数组中。然后对哈希值排序,统计不同值的个数即可得到结果。算法关键点在于选择合适的进制数避免哈希冲突,并使用排序比较来高效统计不同字符串数量。文末提供了完整的C++实现代码,适用于洛谷P3370字符串哈希模板题。

2025-08-27 14:53:05 309

原创 算法题(191):银河英雄传说

本文提出使用带权并查集解决战舰合并与查询问题。通过维护每个战舰到根节点的距离d和集合大小cnt数组,实现高效合并与查询操作。find函数进行路径压缩并更新距离,un函数合并集合时更新d和cnt值,inquire函数通过比较距离差计算战舰间数量。该方法在O(α(n))时间复杂度内完成每次操作,适用于大规模数据。代码实现简洁,初始化后根据指令进行相应处理,正确维护战舰间关系并输出查询结果。

2025-08-26 13:20:03 271

原创 算法题(190):食物链(带权并查集)

在路径压缩前,我们的c节点到a根节点之间的距离是d[c]+d[b](b节点一定要先直接挂在根节点下),路径压缩后的d[c]表示的就不是到b节点的距离,而是到根节点的距离,而由于c到a之间的距离从未变过,所以建立等式:d[c] = d[c] + d[b] =》 d[c]+=d[b]其中d[x]和d[y]都是已知的,然后由于同类之间的距离都是3的倍数,最终计算的时候利用了取余3,所以我们x和y的距离用取余3的结果代替也是可以的,所有3的倍数取余3都是0,所以让x和y的距离为0即可。

2025-08-24 20:16:56 824

原创 算法题(189):食物链(扩展域并查集)

本题总共有三种动物,分别为A,B,C。三者构成环形捕食关系,即A->B,B->C,C->A。也就是x,y集合合并,x+n,y+n集合合并,x+2n,y+2n集合合并。x在A处,y在B处,那么由于x捕食y,所以x+n在B处,x+2n在C处。y在B处,由于y被x捕食,所以y+2n在A处,y+n在C处。给出的指令有两种:其一是x与y是同类,其二是x捕食y。若为捕食指令:出现Y->X/X==Y(同类关系)2.x或y比n大(可能出现在两种指令中)若为同类指令:出现X->Y/Y->X。对两种指令:出现x或y比n大。

2025-08-23 14:34:56 307

原创 算法题(188):团伙

2.由于实际上存在的人数是n,敌人域是我们自己构建的,所以我们最后统计团伙的时候不能统计到敌人域,只需要统计前n个即可。3.由于我们统计的是朋友域,所以我们的根节点一定要是朋友域的节点,否则就无法统计到了,在传参给un函数的时候要注意顺序。由于1和2是敌人,所以我们将1和2的敌人域连起来,将2和1的敌人域连起来,同理后面2和3也近似操作。但是没有说朋友的敌人是不是敌人,敌人的朋友是不是敌人,所以我们不需要进行特别的其他操作。1.题目中只说了两个条件:一个是敌人的敌人是朋友,另一个是朋友的朋友是朋友。

2025-08-22 23:01:45 609

原创 算法题(187):程序自动分析

其实题目中只存在两者相等或不等两种情况,而等于具有传递性,相等就可以放入同一个集合中用树结构存储,判断不等是否成立就可以看两者是否处于同一集合中,若在同一集合说明两者是相等的,此时不等一定不成立,直接返回false。3.在进行等式和不等式的并查集处理的时候不能放在一起只扫描一次,因为题目中的等于和不等于不一定是连续的,也就是说等于和不等于是掺杂在一起的,若一轮处理会导致判误。注意:我们看到数据值的范围是可以到达1e9的,但是我们的fa数组无法开辟那么多空间,而数据个数只有1e5的规模,所以我们可以通过。

2025-08-21 23:23:59 417

原创 算法题(186):lake countings(并查集)

搜索到该节点的上一个节点是通过右下查找到该节点的,若该节点八个方向都搜索,那么就会搜索到他的上一个节点,造成重复搜索与集合合并。其实我们可以给二维数组每一个空格进行从左到右的编号,第一行的编号从0开始,第二行的编号从第一行结尾编号加一开始。联通在一起其实可以看成他们处于同一颗树结构下,一个集合就是一个联通块,所以我们可以使用并查集解决。本题需要我们找到水坑的联通块数(联通在一起的水坑整体算一个联通块)

2025-08-20 07:20:23 265

原创 算法题(185):亲戚(并查集)

进行合并操作的时候,直接对两者原本的根节点进行操作,将一个根节点的父节点变为另一根节点,即可将整个关系树合并起来。否则只能移动一人关系,而不是整个亲戚关系。(2)亲戚具有合并性:a&b,那么a的亲戚也是b的亲戚,b的亲戚也是a的亲戚。由于本题数据结构为树,且需要频繁进行查询和合并集合操作,故采用并查集方法。本题需要我们根据题目要求建立亲戚关系,并按题目输入判断若干次亲戚关系。(1)亲戚关系具有传递性,a&b且b&c可得a&c。

2025-08-19 16:22:16 312

原创 算法题(184):并查集

我们在find取得返回值(根节点值)的时候将返回值赋值给fa数组,也就是将num位置的存储值变为根节点,而不是父节点。我们学习二叉树的时候关注的是某个节点的左右孩子节点的信息,所以当时使用的是孩子表示法,而并查集中关注的是某个节点的。调用find查询函数即可,若经过查询两者的返回值相同,说明所处的集合为同一个,反之则不为同一个。一般使用该集合中一个元素为该集合的标志,处于哪一个集合就返回哪一个集合的标志元素值。找到两个集合的根节点,然后让其中一个集合的根节点的父节点改为另一个集合的根节点即可。

2025-08-18 14:04:11 416

原创 算法题(183):质量检测

根据题意,m是题目给定的值,而Qm表示一段索引1~m的区间的质量最差值,Qm+1表示索引2~m+1的区间。4.最终输出的是产品的质量值,所以要根据队列中存储的索引映射回a数组输出。3.要利用存储的下标来判断最前面出现的产品是否还在窗口中。2.使用队列相关接口的时候需要先判断队列是否为空。本题需要我们求出Q序列并逐行打印。1.队列存储的是下标。

2025-08-09 22:35:40 285

原创 算法题(182):滑动窗口

1.在调用队列的back等函数前需要确保队列不为空,所以在不确定数据量的使用前需要加一个q.size()的判断。因为当前遍历到的数据已经比队尾数据的值要大,所以该队尾数据不可能是后续窗口的最大值,直接弹出即可。因为后续计算队头是否还在窗口内需要用到索引,所以我们不存储数据值,而是存储他在a数组的索引。本题需要我们找到长度为n的窗口从左到右滑动到所有位置的窗口内最大值与最小值并输出。2.最后输出的是数据值本身,所以需要用a[q.front()]若两者相等,也是弹出,因为后续遍历过程会把先出现的数据淘汰掉。

2025-08-07 18:06:52 325

原创 算法题(181):最大直方矩形面积

所以最终矩形一定是以从某一个竖矩形向两侧延伸得来,故问题变成了如何求出某个高度的矩形的左右边界(比他高度低的最近位置),此时就可以使用单调栈了。本题需要我们找到以一条任意高度水平线分割的图形中矩形的最大面积,其中该矩形中间不能有空位。第三步:根据前面得到的矩形左右边界和矩形高度计算出矩形的面积,并比较出max面积。第二步:利用单调栈查找左侧和右侧的边界。

2025-08-03 18:45:44 328

原创 算法题(180):发射站

本题关键是找到所有信号站的左右两侧离他最近的比他高的信号站,然后将这些可以接受的信号值累加起来,得到sum后筛出最大值即可。然后由这个塔去接收信号值,累加进入sum中。1.左侧离他最近的高于他的塔。2.右侧离他最近的高于他的塔。

2025-07-25 19:16:33 258

原创 算法题(179):单调栈

说明当前索引位置不存在左侧大于他的数,且当前栈顶数据也不会成为后续的其他数据的要求数(假设其可以成为后续数据的要求数,那么当前遍历到的数据会比他更符合要求,故不可能)他们和情况1与2最大的区别就是搜索范围,变为了右侧,所以我们逆着搜索,也就是从右往左搜索。我们只需要改变一个地方,将情况1代码中的小于等于换成大于等于,大于换成小于即可。单调栈中的数据始终保持单调递增或单调递减。

2025-07-24 21:45:43 432

原创 算法题(178):填涂颜色

2.正常来说我们需要将边缘一圈遍历一遍把所有边缘0作为起点进行dfs,但是这样要有四次for循环,所以我们从(1,1)作为输入原点,从而让整个图表的外圈多了一圈0,我们直接从(0,0)开始搜索就可以达到同一个目的(将联通0找出来)正常来说我们需要遍历图表,然后对所有0进行dfs搜索,最终在遍历过程中将被1包围的0修改为2,不过可能会出现其中一侧已经被修改为2,但是另一侧发现会和边界联通,从而导致错误修改。所以我们正难则反,将所有联通0找到,并修改bool数组标记所有联通0,最后再遍历图表分类输出即可。

2025-07-22 17:15:58 309

原创 算法题(177):水填充

我们只需要遍历一次整个地图,找到一个没记录过的区块点就让ret++,然后用bfs将该区块的所有点都标记为已遍历过即可。1.由于需要记录遍历状态,所以我们需要使用bool数组,false表示没有遍历过,true表示遍历过。2.由于是八连通,所以我们的dx和dy数组就要多弄四组出来。本题需要我们找到联通(八连通)的w区块数,并输出。

2025-07-21 18:08:55 238

原创 算法题(176):three states

2.对于统计点为荒地的时候由于该地会被铺设三次,所以我们需要减2,统计国家地块的时候我们就直接加就行了,因为国家地块是不会进行铺设的,所以不存在重复铺设的情况。这种方法需要考虑的前提很多,我们的国家不一定是连在一起的,可能都分开,可能其中两个国家连起来,有可能都是直接连起来的,所以不太好写代码。由于铺设的时候遇到荒地可以铺设,遇到国家的时候不用铺设,所以对于铺设数的权值就是0和1.我们就可以采用01bfs了。只需从某个点出发然后搜索到三个国家即可,最后对比所有距离中最小的。

2025-07-20 21:19:04 385

原创 算法题(175):小明的游戏

由于本题的目的是找最短路径,所以我们可以采用bfs来进行搜索,而路径权值并非都为1,而是有0有1.故我们采用01BFS。能成功的本质:权值为1,dis数组的值都是非递减的,所以每一个位置第一次到达的距离一定是到他的最短距离。路径权值为1或0,需要对数据顺序进行排序,还要进行松弛操作将最优距离计入。本题需要我们找到从起点到终点所需的最短距离并输出(多组输入输出)路径权值都为1,直接按轮次搜索即可。

2025-07-19 22:40:50 231

原创 算法题(174):刺杀大使

题目要求我们需要将第n行的m个房间的机关都打开,就是说我们的部队需要进入到每一个房间,而我们是可以上下左右自由移动的,所以只要能进入第n行的任意一个房间即可。假设我们有一个满足题目要求的答案ret,那么比ret伤害值大的路径一定存在,而比ret伤害值小的路径一定不存在。因为二分查找可以将区间范围内所有的数涵盖到,而答案一定存在于二分区间中,所以经过bfs判断的结果一定是存在的。由于题目中需要找的是部队整体伤害值最小的路径中最大伤害值,符合“最小值最大”模板,我们尝试使用二分答案。

2025-07-17 16:23:23 276

原创 算法题(174):全排列问题

我们都是依次放入前面没放过的数据,唯一的区别在于最终的输出格式,题目要求场宽为5,所以我们不能再使用cout来输出,而是使用printf结合%5d来完成输出。本题需要我们找出1~n选n个数的全排列情况,并按照五个场宽的要求输出。其实我们本题的思路和上一题的思路是几乎一致的。

2025-07-13 19:57:20 140

原创 算法题(173):枚举排列

由于最后还需要我们按照字典序输出,且无法事先确定需要的for循环层数,所以我们这里不能采用简单的for循环解决。1.使用bool数组来判断对应数据是否选取过,为false就是没选过,true就是选过。在选取的时候我们依次选取前面没有选过的数插入即可,最后选取满k就输出答案。2.在选择完成和回溯的时候要注意将数据选取状态调整回来。本题需要我们找出所有排列方式并按照字典序排序输出。

2025-07-12 18:07:26 249

原创 算法题(172):组合型枚举

1.使用vector进行数据记录的好处:不用在dfs中传递待插入位置的索引,可以直接使用push_back()接口进行数据插入,使用pop_back()接口进行数据弹出回溯。本题需要我们对1到n的数进行n中取m的组合枚举,找到所有不同的组合并按照字典序输出,要求行内和行间都满足字典序。1.我们需要从前面填写过的数的下一个数开始填写,且这个数的填写顺序是字典序从小到大。其一是无法确定for循环个数,因为我们要取m次,而m是题目给的,我们事先无法知道。对于已经选了1的第二个空位我们可以填写:2,3,4。

2025-07-10 22:38:19 381

原创 算法题(171):枚举子集

如图所示我们可以看到决策树的决策逻辑,进入决策前需要提供当前决策层数,进入决策后我们则需要先给N,再给Y,从而最终可以按照字典序输出(先用N的话优先完成排列的就是含有N在前面多的)。由于本题的可选择字符只有两个,所以本题使用二进制枚举也是可以的,但是这里我们还是使用更通用的递归方法。本题需要我们根据正整数n,实现对字符串的全排列枚举。

2025-06-30 09:28:46 216

原创 算法题(170):地毯填补问题

此时我们其实可以将矩阵分为四部分,每部分都是k为1的情况的矩阵,对于包含公主的那一部分我们可以直接利用上情况1的方法,对于其他三部分我们则可以铺设一块恰好包含这三部分的地毯,从而让其他三部分都有障碍物,进而可以完全利用k=1的解决方法解决k=2的问题。我们不要一上来就直接分析最难的情况,我们先分析k为1的情况。一共有四种情况,我们只需要选择不包含障碍物的地毯即可。本题需要我们找出地毯的铺设方式并将铺设方式打印出来。k为1也就是长度为2^1的情况,此时矩阵为2*2。

2025-06-15 20:27:29 192

原创 算法题(169):最大子段和(分治思想)

我们可以把给定区间平均分成两部分,然后获取左段区间的最大子段和,右段区间的最大子段和,以及跨区间的最大子段和。最后比较出他们三种情况的最大子段和并返回。对于获取左右两段区间的最大子段和,我们可以直接递归调用dfs进行,对于最后一种情况则需要直接处理。本题需要我们找到区间的最大子段和并输出结果。

2025-06-14 18:33:28 349

原创 算法题(168):逆序对

此时cur2所指向的数据和cur1所指向的数据可以组成逆序对,且由于cur1后面的数据也是大于cur1所指向的数据的,所以cur2指向的数据也可以和剩下的左段区间cur1后面的所有数据组成逆序对。由于两段区间都是升序排序的,此时说明cur1所指向的数据不可能组成逆序对,直接cur1++其中查找左段和右段的逆序对数可以直接调用自身进行递归处理,因为他们是同样处理方法的问题。根据逆序对的定义,只要是满足索引和数值呈负相关的两个数,他们就是一个逆序对。也就是说索引小的数值却比索引大的数值更大,此时就是逆序对。

2025-06-13 18:13:35 368

原创 算法题(167):FBI树

而由于题目要求按后序遍历输出,所以我们就按照后续遍历的方式进行递归调用。这种情况只剩当前的字符没有输出,我们直接输出当前字符并返回即可。1.我们使用前缀和算法快速的求出对应字符串的sum,前缀和数组存储的是每一个字符的前缀和的值。假设字符串的每一个索引位置的值相加之和等于字符串长度,说明字符串都为1,此时为字符'I'。假设字符串的每一个索引位置的值相加之和为0,说明字符串都为0,此时为字符'B'。本题需要我们将字符串按照题目要求进行递归展开,并按照后序遍历的顺序输出。首先我们需要模拟一下题目的意思。

2025-06-11 23:23:55 284

原创 算法题(166):占卜DIY

本题其实就是一个模拟题,但是如果我们按照题意对扑克堆进行操作,就相当于对数组进行数据头插与尾删了,而我们需要进行的次数是较多的,这样会导致效率低下,且模拟也不是很好进行。这里我们第一行的扑克牌中四张都没有翻出来过,所以我们需要移动第四张牌,此时我们直接定位到下标为四的牌就是下一个需要移动的牌。3.最终cnt中若没有未翻转的牌,说明该牌堆含有一对,即cnt[i]值为0时说明第i行含有一对,answer++我们发现每次的操作都是一样的,且在抽取到K之前都是逐层进行的,所以我们可以用递归模拟抽牌和放牌的过程。

2025-06-10 22:15:42 360

原创 算法题(165):汉诺塔问题

递归就是大问题的解决要依靠一模一样的小问题,此时我们就可以通过自己调用自己函数的方式来解决此类问题。n为3的情况,我们先将前面两个盘子移动到三号柱子上,然后再将三号盘子移动到二号柱子上。n为2的情况,我们先将第一个盘子移动到三号柱子上,然后再将二号盘子移动到二号柱子上。所以大问题就可以分解为同样的子问题,都是将x柱子上的盘子通过y柱子移动到z柱子上。第二步:将x柱子上的最后一个盘子借助y柱子移动到z柱子上。第三步:将y柱子上的n-1个盘子借助x柱子移动到z柱子上。

2025-06-08 21:37:30 309

原创 算法题(164):贴海报

我们可以直接模拟贴海报的过程,创建一个墙数组,每次贴海报就把对应位置的数组值改为海报编号,最后统计出的整个数组中海报的编号个数就是能看到的海报张数,直接输出即可。我们看到图示情况下,直接将数据录入disc数组可能会出现离散后统计结果与实际不同的情况,这是因为离散化后让区间缩短,如果不手动插入区间会导致离散区间异常重合。时间复杂度:我们需要进行m次贴海报,海报的数据范围是1e7,m的数据范围是1e3,乘起来会超时。由于本题的海报数据范围较大,但是海报张数的数据范围却较小,满足离散化使用前提。

2025-06-07 21:35:09 392

空空如也

空空如也

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

TA关注的人

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