
算法
文章平均质量分 69
慕无言
这个作者很懒,什么都没留下…
展开
-
蓝桥杯骗分小技巧
蓝桥杯骗分原创 2024-03-30 19:28:33 · 3373 阅读 · 3 评论 -
超级胶水(第十一届蓝桥杯)
小明有n颗石子,按顺序摆成一排。他准备用胶水将这些石子粘在一起。每颗石子有自己的重量,如果将两颗石子粘在一起,将合并成一颗新的石子,重量是这两颗石子的重量之和。为了保证石子粘贴牢固,粘贴两颗石子所需要的胶水与两颗石子的重量乘积成正比,本题不考虑物理单位,认为所需要的胶水在数值上等于两颗石子重量的乘积。每次合并,小明只能合并位置相邻的两颗石子,并将合并出的新石子放在原来的位置。现在,小明想用最少的胶水将所有石子粘在一起,请帮助小明计算最少需要多少胶水。输入的第一行包含一个整数n。原创 2024-01-26 18:04:04 · 2689 阅读 · 0 评论 -
质因数个数(第十三届蓝桥杯)
给定正整数n,请问有多少个质数是n的约数。输入的第一行包含一个整数n。输出一个整数,表示n的质数约数个数。对于30%的评测用例,1≤n≤10000。对于60% 的评测用例,1≤n≤109。对于所有评测用例,1≤n≤1016。3963396有 2,3,11三个质数约数。原创 2024-01-23 16:40:23 · 1080 阅读 · 0 评论 -
数位排序(第十三届蓝桥杯pythonB组)
小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。例如,2022排在409前面,因为2022的数位之和是6,小于409的数位之和13。又如,6排在2022前面,因为它们的数位之和相同,而6小于2022。给定正整数nm,请问对1到n采用这种方法排序时,排在第m个的元素是多少?输入第一行包含一个正整数 n。第二行包含一个正整数 m。原创 2024-01-21 12:39:01 · 1555 阅读 · 0 评论 -
三国游戏(第十四届蓝桥杯)
小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X,Y,Z(一开始可以认为都为 0)。游戏有 n个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i个事件发生时会分别让 X,Y,Z增加AiBiCi。当游戏结束时 (所有事件的发生与否已经确定),如果 X,Y,Z的其中一个大于另外两个之和,我们认为其获胜。例如,当 X>Y+Z时,我们认为魏国获胜。小蓝想知道游戏结束时如果有其中一个国家获胜,最多发生了多少个事件?原创 2024-01-20 18:15:50 · 2685 阅读 · 0 评论 -
ABCAB *A=DDDDDD
首先我们可以枚举一下A,再枚举一下D,我们定义一个数为res,它的值为DDDDDD,再定义一个total,他的值是ABCAB,因为res是total*A得来的,所以res%A必定为0,也就是res%A==0.然后我们只需要检查一下res的第一个数和第四个数是否相等以及第二个数和第五个数是否相等,如果这两个条件都满足的话,那么这就是一个满足的式子。本题最最最暴力的解法是利用五个for循环,循环枚举ABCDE这五个数,这里我就不做过多的赘述了,我这里要讲的是优化版本的。原创 2023-04-22 10:39:31 · 577 阅读 · 0 评论 -
飞机降落(第十四届蓝桥杯CB)
当这架飞机没有降落过,我们先判断一下这架飞机的最晚降落时间(也就是d+l)是否在当前传入的last的时间之后,如果在last之后,我们可以先将这架飞机设置为开始降落,也就是st[i]=true,接着继续dfs,这里的u的参数很明显传入的是u+1(这架飞机已经降落了,所以一共降落了u+1架),但是我们这里需要思考一下第二个参数是什么呢?所以最多三亿多次,这个看起来用两秒会超时,但是实际上我们并不是每一次都需要全部枚举出来,当遇到不能安排飞机降落的时候,我们可以直接返回,所以实际根本不需要计算三亿多次。原创 2023-04-18 20:59:59 · 4091 阅读 · 3 评论 -
子串简写(第十四届蓝桥杯CB)
这时候遍历数组用了O(n)的时间复杂度,那么我们剩下的只有O(logn),O(logn)的算法我们想到的是二分,然后我们发现这个下标正好是按照顺序存的下标,正好符合二分的条件。事实是可以的,我们可以将O(logn)给优化掉,我们可以从第K个字符开始遍历,用cnt记录C1出现的次数,用ans记录结果,当i-k+1为C1的时候,我们需要将cnt++,接下来我们每次遍历到C2的时候,就将ans加上cnt。我们可以直接使用该STL,由于该函数的底层是利用二分的方法,所以我们不必担心超时的问题。至此,整个题解完毕!原创 2023-05-09 23:03:21 · 1758 阅读 · 0 评论 -
一对兔子从出生后第三个月开始,每月生一对小兔子。小兔子到第三个月又开始生下一代小兔子。假若兔子只生不死,一月份抱来一对刚出生的小兔子,问1年中每个月各有多少对兔子。(不死神兔)
但是我们仔细思考,这个递归的方法貌似有些计算是重复计算了,比如说当计算dg(5)的时候,我们需要计算dg(4),dg(3),dg(2),dg(1),而计算dg(4)的时候,计算了dg(3),dg(2),dg(1),这里的dg(3),dg(2),dg(1)就是重复计算的。是的没错,除了第一个月和第二个月只有一个以外,其他的月份,当前这一个月的兔子的数量等于前两个兔子的数量的和,有了这个思想,我们就可以利用代码实现了。每个月的兔子的数量只能前两个月的兔子的数量有关。我们首先枚举一下前几个月。原创 2023-04-22 10:35:57 · 885 阅读 · 0 评论 -
最长公共子串
首先这题和”最长重复子串”不一样,本题相对于”最长重复子串”的条件更加苛刻一点,”最长重复子串”选择的子串可以不连续。我们需要开一个二维数组,内存为4*10000*10000,大约400MB,很明显这里会爆栈,所以我们得优化掉其中的一维,使其变为一维。那么我们怎么优化呢,我们可以定义一个dp[N],其中dp[i]代表的是以str[i]结尾的最长的公共子串的长度为dp[i].这里我们可以如果使用暴力算法,由于最长的子串只有10000,暴力算法的时间复杂度为O(N^2),时间复杂度勉强可以达到。原创 2023-04-23 22:49:42 · 127 阅读 · 0 评论 -
接龙数列(第十四届蓝桥杯CB)
对于一个长度为K的整数数列:A1,A2,...,AK我们称之为接龙数列当且仅当Ai 的首位数字恰好等于Ai−1的末位数字 (2≤i≤K)。原创 2023-04-18 20:51:13 · 5401 阅读 · 5 评论 -
0-1背包问题
那么我们看看第二种情况,也就是选的情况,选的时候我们得先看看这个背包够不够格对吧,那么我们就需要检查一下背包的容量,背包的容量上面我们定义了是dp[i][j]中的j的值,这时候我们判断的条件是什么呢?很明显就是第i个物品的重量和这时候背包的容量j相比较,如果当前背包的剩余容量可以装下这个物品,也就是j>v[i],这时候我们就可以将它装入了,装入之后我们的体积就需要减少v[i],剩余容量为j-v[i]。第一种情况,也就是不选的情况,不选的话,我们当前的背包的容量和背包里面物品的价值都不会变,也就是。原创 2023-05-10 23:15:23 · 140 阅读 · 0 评论 -
最大公约数(暴力&辗转相除)
最大公约数有几种求法。原创 2023-04-07 11:22:41 · 71 阅读 · 1 评论 -
冶炼金属(第十四届蓝桥杯CB)
int n;for(;r>0;--r)i原创 2023-04-12 20:29:42 · 315 阅读 · 0 评论 -
排序算法之分治
接下来将整个数组不断的分成一半一半,最后分到一个数组只有两个,再将两个进行排序。以为排序算法的极限就是O(n^2)了,直到后来有个人发现了这个分而治之。的算法,也就发明了快速排序算法(好像是这个),后来就有不少人利用。类似的思想,最后就出现了好几种复杂度为O(nlogn)的算法。啊,这得好好想想,想了好一会才想到用快速排序和归并排序?接着再将两个已经排好序的数组再合并一下,合并的临时数组里面。(果然API函数越用越蠢,但是用的是真的爽啊!事情是这样的,上周因为得了甲流,导致了没去上算法课。原创 2023-04-02 14:36:54 · 78 阅读 · 0 评论 -
买不到的数目
接下来我们需要从m和n之间比较小的开始循环,一直循环到N。我们需要判断当前的数组arr[i]是否为true,当为true的时候,意思就是能凑得到当前的糖果数量,那么。我们需要注意的是数据的范围为[0,1000],所以我们的最大范围为(1000)^2,也就是10^6。本题一眼动态规划,但是我们这里需要思考的一个问题就是对于任何的m,n,是否有一个上限,使其超过这个上限之后,都可以获得?本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。对于输入的m,n,肯定是可以得到的,所以我们这里初始化。原创 2023-04-12 20:56:30 · 54 阅读 · 0 评论 -
K倍区间(你看的这是在凑字数)
然后进行循环遍历,a[s[i]%k]代表的是前面对k取模为s[i]%k有a[s[i]%k]个,那么当前的这个点到上一个a[s[i]%k]这中间的必为k的倍数,所以我们需要加上原来的长度,再将这个长度++;先定义两个数组,第一个数组是s[N],代表的是前缀和的数组,第二个数组是a[N],代表的是投影数组,我们首先写一个前缀和数组,代码如下。假设s[i]%k==x,而s[j]%k==x,其中j>i,那么我们可以得到s[j]-s[i]一定可以被k整除。[l,r]的和为s[r]-s[l-1]至此,本题解题完毕。原创 2023-03-25 23:49:58 · 196 阅读 · 0 评论 -
递归实现指数型枚举
当u==n的时候,说明已经递归到了指定的深度了,需要输出了,接下来我们就需要利用for循环遍历,当status>>i&1==1的时候,说明选了该位,这里我们需要注意的是,我们是从第0位开始,所以我们输出的时候需要输出i+1,接着输出一个换行符,然后再return。我们接下来再说选择当前这位的,选择当前这位,我们需要将状态改变一下,也就是将status的第u位变为1,我们这里选择“|”运算,也就是status|1原创 2023-03-24 22:59:53 · 154 阅读 · 1 评论