- 博客(60)
- 收藏
- 关注
原创 CCF刷题计划——寻宝!大冒险!(set记录树坐标)
注意将 f 和 cnt 初始化!就是因为忘记每次初始化f导致结果错了。主要的思路就是用两个set存对应的树,然后将所有的A中的点都作为基准点试,再在范围内看是否能和B中的点匹配上(
2024-09-16 10:18:30 290
原创 CCF刷题计划——JPEG 解码(状态方向辅助Z型填充)
相当于使用dir为状态机表示当前状态,根据当前状态进行移动。我看到有题解,可以直接枚举存储状态,也是一个不错的选择,就是输入的时候有点手痛。这种问题(z型插入)也不是第一次见了,可以专门记一记,出现类似的也可以考虑使用dir状态表示。这道题唯一的难点其实是处理数据Z型填入。
2024-09-14 16:03:17 292
原创 CCF刷题计划——训练计划(反向拓扑排序)
这种方法通常称为“反向拓扑排序”或“逆后序遍历”,因为它从没有任何依赖(即出度为0)的课程开始,然后逐步向前追溯到有依赖关系的课程。在计算过程中,由于是从后向前遍历,所以当一个课程的最晚开始时间被计算出来时,它的所有依赖课程的最晚开始时间都已经被计算过了。这使得我们能够正确地找到依赖课程中的最晚开始时间的最小值。天,并且每个课程都需要一定的时间来完成,所以更合理的初始化方式是针对没有依赖的课程(即入度为0的课程),将其最晚开始时间设置为。中的课程)的最晚开始时间中的最小值,然后从这个最小值中减去课程。
2024-09-14 11:02:50 506
原创 CCF刷题计划——LDAP(交集、并集 how to go)
这道题按照常规思路来说的话并不复杂,其实就是一个集合的差集、并集、交集的问题。我的思路里,因为最后想要得到关于DN的集合,所以我以属性编号和属性值作为索引(也就是map中的键值),用set存在了DN。但是我在Dev里,VS里面都跑的好好的,奇奇怪怪。,最后也是成功做出来了,在其他编译环境下测试样例也是过的好好的,但是提交的时候运行错误我是真的会谢……注意,使用set只能过70%,使用unordered_map和vector可以更快,不会超时。看了题解,发现和我的思路差不多,但是相对而言使用了。
2024-09-13 10:14:59 408
原创 CCF刷题计划——垦田计划(手握map砍竹子)
使用优先队列还超时了,这是我没想到的,但是好歹得了70分,而且复习了优先队列,还是不亏的。经过我的优化,还是把这道题做出来了。
2024-09-12 11:16:31 453
原创 CCF刷题计划——田地丈量
因为是左下,所以相对而言是要挑最小的,可以画图,简单看出,最大是x1,y1。同理,右上角也是,最大最大是(a,b),所以 rx<=a,ry<=b。不妨先按上述方法试试,试了之后就爽了,因为发现如果不存在,这两个点会在同一水平线上,所以rx=lx,计算出来的面积=0,我们可以不用分类,直接用上述方法。我想过用点作为分类的条件,那么情况只有三个,一个点在矩形内部,还有两个点在矩形内部,四个点都在。也不是,如果划的矩形超级大,那么重合的面积就是a*b,但是如果按照我之前的思路的话,就是没有交集。
2024-09-12 08:56:38 275
原创 CCF刷题计划——解压缩(stoi+bitset双管齐下)
取长补短,其他人的代码中的获取数据的方式就很nice,我首先可以在这方面优化一下,不要一口气把所有的数据都取出来。还有traceback函数也很深刻,我做到最后都没把回溯引用弄明白,直到看了其他人的代码,才知道,原来回溯引用就是引用之前出现过的,而且o、l 的两种情况的重复单元起始位置是一样的。实现这个的方法也很简单,你可以使用stack,当然,也可以像代码中一样从后往前遍历,i-=2。可以学习一下,当然,也可以自己写转二进制函数,但是别人家的总归是好用点,就当扩展知识面了。说实话,这道题有被打击到。
2024-09-11 21:07:39 410
原创 CCF刷题计划——矩阵运算(矩阵计算优化二策略)
现在这分也越来越难挣咯~这也超时,那也超时的。但是也给我们一个矩阵优化的思路,那就是。我们发现,当矩阵过大的时候,转置啊乘法啊什么的就会很费事。具体规律我写到了代码中,大家也可以自己手动画画。下面给出超时和AC。
2024-09-11 09:11:14 258
原创 CCF刷题计划——阴阳龙(八方最近点)
本题用了大量的篇幅去介绍k是怎么来的,就是为了让我们忽视,k其实本质上就是最近的那个点到龙的距离。我们最后保留的是这四条线上的点,所以我们可以先把这八条线上的最近的点提取出来,然后再从这8个点中找最近中的最近。最好的方式,就是一边存的时候,就一边将过该点的四条线的信息存进去。满足相同键值的点一定在同一直线上,比如水平的,点a(2,3),b(8,3),他们水平线的键值都是3,所以他们的水平线是同一条。我们需要将那八个点剔除不在位置上的(也就是之前发现k的含义其实是最近的距离),将大于k的那些点给pass掉。
2024-09-10 19:33:59 1065
原创 CCF刷题计划——坐标变换(其二)(前缀和)
改进策略,我觉得伸缩是线性的变换,可能通过类似前缀和的方式进行规整。比如说,执行12345这五条指令,其中135都是伸缩指令,按理说,我们一共需要执行五次。如果使用类似前缀和的想法,我们只需要知道1、5这两次的前缀积,然后将k[5]/k[1-1],就可以得到这部分总共需要处理的伸缩值了。但是我发现这样还是有问题,因为为了判断旋转这种,还是会遍历一遍。那么,旋转,能类似前面的方式进行优化吗?如果不看公式,看角度的话,旋转其实也是一种线性的变化,无非是在前面的基础上进行加减罢了。
2024-09-10 08:42:18 348
原创 CCF刷题计划——树上搜索(妙用book区分树、set判断位置)
可以使用book[ cur ]++区分不同状态下的树,这极大方便了我们最后计算和比较delta的时候。试想,如果不能用book区分树,我们会老老实实对树进行修剪,遍历的时候也会老老实实从树根开始,这样太麻烦了。我一开始还没反应过来,但是写到后面才知道,这样会极大方便我们确定获得的节点相对goal节点的位置。这让我想到并查集,但是并查集是一个一个连着的,需要一层一层往上调。我们对树的表示都是差不多的,都是使用了一个数组来记录每一个节点的子节点,方便从上往下遍历。特别是如何删除树枝、如何保留新的树,都是难点。
2024-09-09 11:33:06 984
原创 CCF刷题计划——因子化简
很暴力的算法,但是过了。主要就是想着将所有的素数都先dia出来,然后将n对每一个素数都进行一次相爱相杀,同时记录用上的素数和指数。顺便学了个素数筛,之所以把全部素数都提前弄出来,其实就是为了防止多次重复计算素数。其实看到范围限制的时候就可以放弃这个策略了,因为全部的测试数据满足:1<n<=1e10 且 1<k,q≤10,相当于最多只重复个10次而已。他没有用欧拉筛选出所有的素数,而是在遍历过程中判断是否为素数,相当于而言减少很多不必要的计算。但是借此机会学习我上面提到的欧拉筛也是一桩美事~
2024-09-08 22:28:53 460
原创 自学动态规划——携带矿石资源(多重背包)
其实一开始我还以为这道题可以用增加一个维度的方法做,但是结果和想法相去甚远。,然后再用01背包做。但是因为这一步会很费事,所以我们就直接在循环上体现。,01背包是一个物品只能用一次,而完全背包是无限用,而。
2024-05-31 08:50:34 217
原创 自学动态规划——单词拆分
将dict中的单词看做物品,s.size()看做背包总容量,dp[i] 表示长度为 i 的s子串能否由dict中的单词组成。很好的一道完全背包的问题。彻底把我迷晕了,哈哈哈哈。但是看了解析之后还是清晰了不少。
2024-05-30 22:14:38 223
原创 蓝桥杯2022(十三届)国赛——2022(背包)
题目只不过多了一维,变式了而已。其次,因为我们省略了第一维,所以需要将条件从后往前遍历,这是01背包经典套路。值得注意的是,我们应该反向遍历哪个条件呢?下面这种算法还是比较符合学习机理的。首先是递推公式,因为求的是方法数量,所以用。非常的熟悉,但是同样也仅仅是熟悉罢了…回头把背包好好复习一下。至于原理,小弟还不太清楚,只能暂且记住这个结论——若是我对这个的理解有误,请各位大大指正!只反向当前选取的物品个数——最终答案正确。只反向背包容量(k)——结果错误。两者都反向——可以获得正确结果。
2024-05-30 18:59:50 382
原创 自学动态规划——爬楼梯(加强版)
对比一下下面的公式,是不是也是这样呢?我们将能走的步数(1~m)当做物品和体积,将总阶梯数当做最大背包容量,构建成一个完全背包寻找方法的模型。显然,112和121是两种不同的方法,所以这个还是。虽然看起来和完全背包没有什么关系,实际上还是有背包的影子的。**排列数:先容积,再物品。**和下面不谋而合。还记得完全背包找排列数方法个数的。
2024-05-29 20:21:19 440
原创 蓝桥杯2023(十四届)省赛——景区导游(最近公共祖先LCA)
这里还有一个妙点就是,通过计算当前位置到根节点的位置计算到最近公共祖先的距离。**思路和之前刷的差不多,可能代码细节上有些区别,大家可以选择自己好理解的方式~但是实际上和我一开始分析的是一样的,最近公共祖先。的,因为我们最后返回的最近公共祖先是x,y的父亲节点,所以他们的父亲节点也应该要一样才可以。但是这道题和我之前刷的公共祖先不一样的地方在于,不是用并查集的方法,而是用了一个所谓的。本来一开始想用Floyd算法,看看能不能水个分的,但是实际上,居然运行错误呜呜呜呜。的曾祖父节点,以此类推。
2024-05-28 16:42:20 958
原创 蓝桥杯2023(十四届)省赛——子串简写(跳跳双指针、妙妙剪枝)
回顾一下我这个蠢蛋的思路:一开始遍历len+i,结果只过了俩;然后遍历i和j,len直接计算,只过了70%;之后将a、b的位置全部存储,遍历ab的所有情况,过了80%;最后使用剪枝,确定了a,确定了首个满足的b,就可以计算得到以a为起点的所有满足条件的b的个数,然后直接break,这才能全过。能成功自己做出来了,哇咔咔咔,刷到后面,脑海里面其实真的没有印象了,但是实际上潜意识还是会引导你走向正确的道路,所以,加油吧,刷题人QWQ。这里的剪枝实在是泰妙啦!
2024-05-28 10:38:26 848
原创 蓝桥杯2023(十四届)省赛——岛屿个数(DFS+BFS)
*法一:**本题很妙啊,你发现没有。反向操作,不是直接算岛屿数量,而是先将最外层的海洋给标注出来(DFS,这个思路和我做的方法区别在于,我是从外向内,而该思路是正向思考,然后利用内岛的性质,对整体做出进一步加工。二刷:思路和一刷差不多,主要是代码方面有些许差别大家可以选择容易理解的。的当做整体,这些不管里面有没有子岛屿,有多少个子岛屿,都是一个大岛屿。),然后再用一次DFS把所有。
2024-05-28 10:06:20 535
原创 蓝桥杯2023(十四届)省赛——接龙数列(DP)
但是实际上用二维即可。想求的是删除个数,我们反向操作,计算选取个数,最后用总量-选取个数=删除个数。这样就转化成了背包问题了,只不过,这个背包,装的条件,有些奇奇怪怪?琢磨半天,本来是开一个三维的,
2024-05-27 16:22:23 430
原创 自学动态规划—— 一和零
这里其实相当背包要满足两个条件,所以我们可以将dp开成二维的,之后的操作,其实就是和普通01背包差不多啦~注意这里是要求的子串个数,所以我们递推公式最后是+1。其实遇到这种还好说,我宁愿遇见这种,也不想遇见那些奇奇怪怪递推公式的题目。
2024-05-26 20:21:07 793
原创 自学动态规划——目标和
本来我想直接用之前的方法,每处理一件商品就判断一下,看看是不是到达最大容量了。如果是,那就ans++。但是这个思路有个致命的问题,就是会重复计算,比如我1 2 3可以,然后当i=4的时候,我不要4,那此时的结果因为取最大值,所以还是1 2 3,还是算做一次。就不一样了,注意初始化 dp[0]=1,否则根本累加不了。这次做的时候递推公式搞错了捏。
2024-05-26 20:17:34 359
原创 蓝桥杯2023(十四届)省赛——统计日期(八重神子)
其实一开始我想直接暴力的,然后写着写着突然觉得可以优化一下: 优化方法:先找所有2023的位置,记录初始和最后的位置 找出所有合法日期的位置,使用前缀和,计算以当前2023结尾时,其后有几个合法日期,相加即可 但是有个问题就是,如何如果遇见相同的日期,怎么存储其位置?
2024-05-23 22:02:06 264
原创 自学动态规划——最后一块石头的重量 II
1049. 最后一块石头的重量 II - 力扣(LeetCode)也是三刷,能无阻力做出来,但是发现做的效果没有之前好了,可以学学之前做的时候是如何优化的。//也是分为两组,要让这两组的差值最小即可//看做是背包,均分数值,即最大容量是 sum/2,然后选取来装,让其尽可能装满,最后用总量来减就是另一个背包的重量,将两者相减就是答案int sum=0;i++)j--)优化方法是,多加了一个判断,如果恰好已经是一半了,那就直接返回就好,不需要再算剩下的了,因为此时已经是最好的安排了。
2024-05-23 20:59:55 150
原创 自学动态规划——分割等和子集
分成两个集合,那么相当于提取数据,一个是取,一个是不取 如果看做是背包问题的话,相当于一个容积为n,要取价值为总价值一半的情况!价值和重量都为对应值,那么背包装满之后的总价值应该也是背包总容积!),是否存在一个子集能够达到这个和。即,前i个能否恰好凑出一个j,如果可以,那就是true,反之就是false。比较好理解,对于新手而言,动态规划其实就是找规律,将重复计算的结果存下来,下次就不用计算了,直接用就行。三刷,虽然没有用01背包解决,但是却是使用到了之前刷蓝桥杯的时候学到的一种方式。
2024-05-23 20:38:53 311
原创 蓝桥杯2023(十四届)国赛——AB路线(BFS)
所以需要三个维度,而且需要注意第三个维度只能到开到 [11] ,本来我想直接用第三个维度代表 step 总走的步数的,但是如果考虑最坏情况 N*N 的话,就成了。而BFS有多条路径,这些路径可能会有重合的地方,如果只用两个维度的话不能算真正的。,有的小伙伴可能没有嵌套中间的while就直接ans++了,这样会使ans很大,是不对的,仔细想想层序遍历的步骤,需要当前。一道经典的BFS,注意node需要3个维度。但是注意,如果这样写的话,就需要对不同情况的。的时候,才是一层,对应这里,也就是一步。
2024-05-22 21:46:48 314 2
原创 蓝桥杯2022(十三届)国赛——齿轮(精打细算的二分)
所以,本质来说,用一个循环遍历 r 作为 r1,然后找一个数 ri = r*q 即可,二分嘛。还有一点就是需要特别判断 n==1 && q==1 的情况,因为我们推导的公式中是。头一次看到二分还要精打细算的……也不行,不然怎么说是。呢,一点亏都吃不得。
2024-05-22 19:33:44 348
原创 蓝桥杯2022(十三届)国赛——机房(细嗦LCA)
pre 只能一步一步走,而 f 可以跳着走,对于寻找最近公共祖先而言,f 的效率是更高的,但是同样也是最难理解的,但是本题之所以 pre 也能做出来,我觉得是因为我在寻找最近公共祖先的时候就已经在为最后答案输出做铺垫了。真的服了,这道题,本来用自己的方法做出来了,但是提交的时候就过了一个样例。被逼无奈去看了题解,用了一个高深莫测的优化方法,学完之后再去做,发现还是只过了那一个样例,哭了。:版本1的代码是一点一点加起来的,而版本2则是有一种树上前缀和的感觉,专业一点应该叫做。,感兴趣的同学可以去搜搜。
2024-05-22 18:22:40 570
原创 蓝桥杯2022(十三届)国赛——出差(Dijkstra)
一点点变式的Dijkstra算法,应该庆幸没有让我们打印路径。为了让大家更好的理解Dijkstra,下面详细写了相关知识点。注意下面代码和上面变量和数组的对应关系哦~
2024-05-21 16:54:51 429
人工智能作业答案(北方工业大学人工智能选修)
2024-06-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人