刷题
文章平均质量分 78
愿此后再无WA
一个人必须不断努力,才能不被茫茫人海淹没。
展开
-
蓝桥杯必备模块——datetime 轻松应对各类时间问题
运用datetime模块 突破各项时间难题,本期包含的题目有:含2天数、回文日期、日期问题、第几天、星期一、时间加法、时间显示。原创 2022-04-03 17:10:57 · 1289 阅读 · 5 评论 -
蓝桥杯 最优包含 编辑距离【第十届】【决赛】【B组】 DP python
ok,了解了编辑距离之后,最优包含这道题就显得稍微简单些,毕竟跟前面挺像的而且只涉及修改操作,尽管如此我们还是不能够掉以轻心。与前面不同的是,这里是初始串是目标串的子序列,而不是要变成目标串,那么这样的话初始串里面的元素就有两种操作修改或者不修改(如果Str1[i] 与 Str2[j] 相等的话那当然就不用修改这位置,那修改次数就是看Str1[0] ~ Str1[i-1] 与 Str2[0] ~ Str2[j-1] 的修改次数了。),涉及到修改或不修改,那么这里就很有讲究了,就是初始化问题,与前面不同,因为原创 2022-04-02 10:01:37 · 1197 阅读 · 4 评论 -
蓝桥杯 游园安排【第十一届】【决赛】【A组】LIS 路径还原 二分-bisect python
这道题比LIS更棘手的地方就是还要将字母打印出来,我们知道LIS优化的算法里面维护的那个数组里面的元素与结果没有太大的联系,唯一能够联系的地方就是维护数组的长度与最大递增子序列长度对应。而如果要得到它的路径是做不到的。那么这里就需要进行路径还原,进行路径还原的话我们要多开一个与总单词个数一致的数组(记为state),分别记录以每个单词结尾所能达到的最大长度。比如…我们以数字为例,数字大小代码单词的ASCII的大小。起初维护的数组是这样的:1 4 7 9,此时state 存的数据是 1 2 3 4,因为前面四原创 2022-03-31 22:44:49 · 1588 阅读 · 2 评论 -
蓝桥杯 修改数组【第十届】【省赛】【A组】并查集应用 python
看完上面的视频相信你对并查集有了初步的了解。回到这一题,我们最先想到的思路应该是,遍历这个数组如果这个数字在前面出现过就让他加一,加一还出现就还要继续加,不断加一加到前面没有出现为止,但如果这样一个一个遍历的话那必定就会超时,所以要看看怎么才能优化他。诶,你说假设我们已经知道了这个数加到多少才停下的话,是不能就能省掉中间加+1的环节实现优化的目的?假设给出的数字是3,加到8才停下,那么我们知道的一点就是3到7之间的元素一定都已经出现过,也就是3到7之间是连续的。连续有什么用呢?(对这题而言)连续就能进行原创 2022-03-31 21:21:29 · 1284 阅读 · 1 评论 -
蓝桥杯 扩散【第十一届】【决赛】【B组】 python BFS 多种数据类型比较
通过比较我们发现,不同的数据类型它的处理速度是不一样的。在队列模型中,最快的是deque双向队列,其次是列表,最后是queue单向队列,没想到列表不是最慢的。如果要进行数据存储的话集合是最快的,其次是字典,最后时列表,所以进行数据存储的话不要再使用列表啦!根据以上结论,以后的BFS要使用deque+集合的形式进行计算。...原创 2022-03-24 16:45:34 · 1580 阅读 · 8 评论 -
蓝桥 穿越雷区【第六届】【决赛】【C组】 BFS模板题 python
本题的重中之重就是最少移动步数。给出了一个图形,让我们求从起点到终点的路径,常见的搜索算法有DFS,跟BFS。如果要求起点到终点的路径总和,我们使用DFS来求解比较方便些,而如果要求起点到终点的最短路径,那无疑就是使用BFS了。比如在下象棋,BFS就是你走一步我走一步,DFS就是一直是我走,等我吃完你的帅然后才到你走。既然已经知道了要使用BFS,那么套用BFS模板即可求解,但是要注意有两个电极,每次只能去相反电极的位置。因此我们可以将其转换成-1,跟1,如果两式相加为0那么不能走,另外走过的路可以标记为原创 2022-03-23 21:59:54 · 978 阅读 · 0 评论 -
蓝桥杯 蓝肽子序列【第十一届】【决赛】【研究生组】DP模板题 python
这是一道模板题,之前我做这类型题是使用二维DP做出来的,学的那些教程文章、视频都是二维DP做的,因为最近一维DP比二维DP还上手了,于是想尝试一下看能不能使用一维DP解决,尝试了好久好久,我也理清楚原因了,确实不能使用一维DP,如果用一维的话就改变了原有的状态而且无法复原。怪不得那些大佬演示的时候使用的都是二维DP。原创 2022-03-23 22:34:12 · 1485 阅读 · 4 评论 -
蓝桥杯 国赛 123 TLE记录 二分 三角数 前n项和
上面的数字“1 12 123 1234…”有两种看法,第一种就是看总和,把他当做三角形数 看,第一项是1,第二项是3,第三项是6…也能看项数,把他当做普通的等差数列看,第一项一个数,第二项两个数,第三项三个数…对这些数字的看法不同,产生的作用就不同。题目要求一段连续数字的和是多少,那么我们可以先确定起点和终点的位置,然后通过某些方法求出他们之间的数字总和。对数字的看法不同,作用确实就不同,先以第二种为例,已经知道的每一项有多少个数字,那么我们就能通过公差为1的等差数列的前n项和找出起点和终点的位置,原创 2022-03-22 21:24:52 · 1317 阅读 · 2 评论 -
洛谷 亲戚 并查集 python
第一次做并查集类的题目,之前虽然接触过,大致的解法也学习了,但却没有真正动手实现一下,说真的看会跟会写是两码事,刚开始做的时候不知道为啥就是有点抗拒不想接受这个知识点,但没办法,快比赛了硬着头皮上了,多点练习才是硬道理。原创 2022-03-21 17:28:06 · 727 阅读 · 3 评论 -
力扣285场周赛做题记录:射箭比赛中的最大得分 01背包,回溯,路径还原 python
路径还原就是找结果的逆过程,在花费相同箭数的情况下通过比较前i件物品与前i-1件物品的最大价值,如果前者大于后者,说明在决策第i件物品是否选择时是选择了第i件物品,而选择了这件物品就要减去这物品需要花费的箭数,返回到前一个状态,不断重复上面动作即可找出全部状态。如果最后还有箭数多的话就任给一个区域即可。原创 2022-03-21 09:58:49 · 586 阅读 · 3 评论 -
蓝桥 包子凑数【第八届】【省赛】【A组】python gcd 完全背包
我们已经知道了唯有两数互质才有无法组成的最大整数,当出现N个数时,同样这么判断:遍历存放数字的列表,使用gcd两两比较得出最大公约数,如果是1(互质),就说明这个组里面一定存在无法组成的最大数。如果不是1,用这个公约数与下一个数字比较,如果是1,那么这个数字一定至少与前面的一个数字互质,如果不是1,继续用他们的最大公约数与下一个数比较,重复上述操作,直到找到两数互质或遍历完列表,如果遍历完列表gcd的结果仍不是1说明这些数之间没有一个数是互质的,可以返回“INF”,反之,如果发现至少有一个数互质,那么就能得原创 2022-03-20 09:28:22 · 781 阅读 · 1 评论 -
蓝桥杯 算法提高VIP-打水问题
回神后发现,其实就是条条大路通罗马,不止一种打水方式是最优的。那么我们可以使用贪心的思想谁用的时间短就谁先,当对时间序列排序后假设有两个水龙头,第一个人必定是第一个,第二个人必定是第二个,第三个人必定是第一个,第四个人必定是第二个等等..找到规律了吗?没错就是这样,因为是排好序了,所以每次轮到的人都是接着前面最先接完水的那个人,即,每队的间隔已经内定,既然内定了,所以我们就能一遍过数组,后一个人的等待时间等于前一个人的等待时间加上前一个人的接水时间,同时统计总的接水时间。需要注意的是,每个水龙头最后一个接水原创 2022-03-19 22:25:57 · 393 阅读 · 0 评论 -
蓝桥杯 算法提高VIP-夺宝奇兵 python dfs动归
题意是从下往上走到顶点,哪个地方数字大就走哪边。但题目出的不够严谨,默认的意思是只能往正上一格走或者左斜上一格走,但没有说明。对于地图,我们可以用一个二维列表存储。如果从下往上走的话需要考虑边界情况,如最下面一行的左边的4,它没有左斜上的格子,以及下面一行最右边的5它没有正上的格子。但如果从上往下的话就不用考虑边界了,如果从上往下走,走到最底层,要么是走下面一个格子,要么就是走右斜下的一个格子,而这些格子都必定存在的,因此我们可以从上往下走。每走一步都选择金币多的走,不是简单的判断下面格子哪边金币多原创 2022-03-19 21:49:04 · 496 阅读 · 0 评论 -
蓝桥杯 调手表【第九届】【决赛】【B组】python dp
其实呢,python的索引支持负数,所以不需要对负数取模也能得出结果。先理一下题目大意,就是求调每一分钟最少需要的最大次数。比如这个星球一小时有5分钟,那么可能需要调一分钟,两分钟,三分钟,四分钟才能对准时间,或者不调,而调这些分钟可以按+1键也能够按K键调,所以我们就要找其中需要的最少次数。因此,这题有两个状态,一个是按+1键,一个是按+K键。对于每一分钟来说就是看是按+1键调还是按+k键调,取其中的最小值(最优子结构)。首先初始化状态,先初始化全按+1键需要的次数,接着初始化全按K键需要的次原创 2022-03-19 21:22:12 · 678 阅读 · 0 评论 -
蓝桥 机器人行走 模拟 python
我们可以用0-1的点表示距离,如(0,1)表示面向前面,(-1,0)表示面向左边,(0,-1)表示面向后边,(1,0)表示面向右边。根据以上四点,可以得出三个规律:无论向左转还是向右转,0所在的位置都要改变,比如0在第一个的,改变方向后0在第二个了;当向右转且第一个位置不是0时,除了颠倒顺序还要在非0位置加个负号,比如(1,0)向右转就变成(0,-1);当向左转且第一个位置是0时;除了颠倒顺序还要在非0位置加个负号,比如(0,1)向左转变成(-1,0)知道方向后其他就简单了原创 2022-03-17 21:12:07 · 556 阅读 · 4 评论 -
分解质因数 小O的质数 阶乘约数 求值 python
什么是质因数?质因子(或质因数)在数论里是指能整除给定正整数的质数。根据算术基本定理,不考虑排列顺序的情况下,每个正整数都能够以唯一的方式表示成它的质因数的乘积。两个没有共同质因子的正整数称为互质。因此,一个数如果没有其他质因数的话那么就是他的质因数就是他本身。既然一个数可以由一个或若干个质因数表示出来,那么我们就能从小到大遍历这个数,如果遇到一个质因数,就不断对他作除,直到除不尽(直到有小数)才停下。等除完后这个数跟刚才的质因数已经没有任何关系了,接着就是找下一个质因数,重复上面步骤,直到这个原创 2022-03-17 11:12:39 · 6440 阅读 · 0 评论 -
蓝桥 日志统计 边界判断 python
说实话我没做过这种类型的题,但是给我的感觉就肯定不能一个一个找然后累加判断。想了一下发现只需要判断边界点就ok。我们以id为键,ts为值,将其存入到字典中。然后将每个id的ts按从小到大排序。接着就是判断第i个ts与第i+k-1个ts的差值是否小于d.这里的k表示点赞数,d表示时间戳。其实我们就是判断要**第一个可能符合条件的区间**。对于每个i位置的ts而言,由他作为起始值的区间能否上热帖就要看第i+k-1个ts(这个位置是所需最少点赞量),这是以i位置ts作为起始值的最前判断结束区间,如果这个区间符原创 2022-03-13 18:24:01 · 1109 阅读 · 2 评论 -
蓝桥 质数拆分 dp python
凑数问题当然是用dp了。首先将所有质数存放到列表中,质数的话看除1外有没有能被整除的数,有的话就不是质数,否则就是有质数。拿到质数后就开个长度为质数+1的数组,我从二维dp角度讲吧,dp[i][j]表示第前i个数能够凑出数字j的总数,而一维dp[j]表示第i个数能够凑齐数字j的总数,还要加上以前能够凑齐j的总数。也是一个意思,只要理解什么是滚动数组就ok,可以看一下carl的这个视频,讲的很详细。这里.如果你不太明白我在说什么的话可能就要找找dp的教程视频看看了,我也是这么过来的。当 i 与 j原创 2022-03-13 12:34:14 · 1480 阅读 · 0 评论 -
蓝桥 倍数问题 枚举优化
可以先求出这些元素与K的余数进行存储。因为对于三个数来说,他们的各自的余数之和若能够整除K的话,那么这三数之和必定也能够整除K。而这么存储能够缩减数组长度,提高效率。不管如何存储,总的数据都是没有变的。我们使用一个字典,以余数做键,列表作为值,将与余数对应的元素存入到列表中。就样例而言,应该是这种形式存储。原创 2022-03-12 22:20:06 · 659 阅读 · 17 评论 -
蓝桥 纸牌三角形 回溯+dp
这是一道填空题,数字区间不大,竞赛的时候想都别想直接全排列所有组合然后计算符合条件的结果即可。但是,现在不是比赛,我们就尽可能地利用平时使用的算法来优化解决以上问题,达到加深印象的目的。我们先分析一下这个三角形有什么规律。可以知道处在顶点的三个数字出现过两次。所以总和其实就是1 ~ 9的和加上重复出现的三个数字的和。对于一个等边三角形,他们三边之和一定是3的倍数。所以我们可以先计算这些数字的总和,判断是否能够整除3,如果可以,那么这些数字才有可能拼成等边三角形。”为什么是有可能而不是一定?因为一条边原创 2022-03-11 17:08:04 · 422 阅读 · 1 评论 -
leetcode 分割等和子集 一维DP
分割等和子集类似于01背包,相当于容量与价值1:1。求的话就是看能不能凑出总和的一半这个数来,如果可以,那么就能分割等和子集,否则就是不能。这题我之前也做过,但是之前用的是二维,最近学会了一维的,就拿这个练手。拼凑有个特点,数组前面元素能凑出的值,后面一定能凑到,如果凑不出就看有没有与这个值互补的,如果有也可以凑出。注意,一维的话要从后往前求,否则会覆盖掉前面的值。原创 2022-03-10 21:37:57 · 203 阅读 · 0 评论 -
蓝桥 买不到的数目 python 数论 /记忆搜索
那这个公式怎么求的?**如果发现一串连续递增数字可以连续N次被组合出来,而这个N==min(a,b)的话,那么这串数字的前一个数就是就是无法组成的最大数了。因为之后的数都能匹配。** 比如给出两个数4,7 18 = 4+7+7, 19 = 4+4+4+7,20=4*5、21=3*7。都能够被组合出来,之后的数可以通过18+4,19+4..组合出来,因此18-1=17就是无法组成最大的数了。原创 2022-03-09 20:29:12 · 797 阅读 · 0 评论 -
剑指 Offer II 095. 最长公共子序列 经典DP
这是DP很经典的一道题,做这道题需要想明白如何用DP表示。可以这么定义:在字符串str1与str2中,用一个二维DP分别表示str1与str2的公共序列长度,其中DP[i][j]表示str1[0] ~ str1[i]与str2[0] ~ str2[j]的公共子序列长度。那么DP[i][j]就会出现一下几种情况:1、str[i] == str[j]: 如果它两相等,那么就看除它俩外前面的公共子序列长度,即str1[0~i-1],str2[0~j-1]。然后让前面的已经得出的子序列长度+1.2、st原创 2022-03-09 16:26:35 · 290 阅读 · 0 评论 -
洛谷 P1002 过河卒 记忆化搜索
这题比较容易想到的就是回溯搜索找出所有到达终点的位置数,但这么做会超时,在这题记忆数组跟回溯好像不好搭配,于是我使用了递归加记忆数组。思路就是一个点所能到达的路径数等于这个点的右方跟下方所能得到的路径数总和,不断递归求取即可得出结果,对于走过的位置可以使用记忆数组记录,之后的话直接引用值即可。原创 2022-03-08 18:39:58 · 247 阅读 · 3 评论 -
AcWing 24. 机器人的运动范围 dfs枚举
这是一道初级迷宫类问题,我一开始看到直接套用回溯模板,后来发现不对劲,因为回溯的话同一个点可以经过很多次,而这里只需要走一次,所以标记它走过的点即可,如果走过就不用再走了。原创 2022-03-08 12:00:10 · 120 阅读 · 2 评论 -
AcWing 125. 耍杂技的牛 数学归纳法
想说的话大家好,我是 @愿此后再无WA,可以叫我小A,一位阳光帅小伙,对算法领域比较感兴趣。如果我的文章对您有用,欢迎持续关注,我们一起进步!很抱歉各位,现离蓝桥杯仅剩一个月时间,我临时改变了计划,转为全心备战蓝桥,因为这个省一对我来说太重要了,也是我最后一次机会,我一定要拿到手,那么这样的话我在博客上花的时间就会少了很多,也将导致博客文章质量明显下降,在此我给大家说声抱歉这些日子我真的很开心,博客上能遇到一群志同道合的兄弟姐妹真的很幸福,没有你们的支持与鼓励也许我早就坚持不下去了,因为有你们我才原创 2022-03-08 10:19:00 · 237 阅读 · 3 评论