![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
蓝桥杯python
文章平均质量分 62
sml_5421
错题集
展开
-
扩展gcd
因此,对于上述问题,可以先求出ax+by=gcd(a,b)的解(x1,y1),然后再通过乘上m/gcd(a,b)求解x,y.对于任意整数a,b,m,求解未知整数x,y时,对于ax+by=m可以推出a,b的最大公因数可以整除m。上述得到的x1和y1再乘上m/gcd(a,b)就得到一组特解。原创 2024-04-11 20:50:06 · 711 阅读 · 0 评论 -
快速幂(递归,二进制拆分)
求类似ab的问题。原创 2024-04-11 20:32:26 · 184 阅读 · 0 评论 -
素数,埃式筛法
在大于1的自然数中,除了1和它本身以外不再有其他的因数的自然数。素数x的因数只有1和x。原创 2024-04-11 14:28:42 · 142 阅读 · 0 评论 -
整除/同余/GCD/LCM
整除:一个数能被另一个数整除,即余数为0。a整除b,就是b%a=0,记为a|b。b被a长出说明b%a=0。python中的除法默认是小数除法。python中的整除符号为//。原创 2024-04-11 14:23:28 · 368 阅读 · 0 评论 -
树状数组——逆序对
如果某个小朋友第一次被要求交换,则他的不高兴程度增加 1,如果第二次要求他交换,则他的不高兴程度增加 2(即不高兴程度为 3),依次类推。当要求某个小朋友第 k 次交换时,他的不高兴程度增加 k。开始的时候,所有小朋友的不高兴程度都是 0。请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。每一个小朋友的最小交换次数等于他左边比他高的人加上右边比他矮的人。输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。输入的第一行包含一个整数 n,表示小朋友的个数。最大运行内存: 256M。原创 2024-04-11 11:50:50 · 360 阅读 · 0 评论 -
基础算法——排序算法python
插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。快速排序通过选择一个“基准”(pivot)元素,将待排序的序列划分为两个子序列,左边子序列的元素都比基准小,右边子序列的元素都比基准大,然后再对这两个子序列分别进行快速排序,最终得到有序的序列。,其中n是列表的长度。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。原创 2024-04-07 13:31:22 · 513 阅读 · 0 评论 -
求连通块问题
emmmm,对于连通块,其实有很多方式求解。这里我还是以那个为例子来简述怎么用python操作。原创 2024-04-01 23:22:13 · 388 阅读 · 0 评论 -
求排列组合
剪邮票。原创 2024-04-01 22:57:20 · 733 阅读 · 0 评论 -
并查集基本概念和基本操作
合并集合x,y,找到x的根节点rootx和y的根节点rooty,设置p[rootx]=rooty或者反过来也行,但是只能写其中一个。给每个集合编号,合并就是把两个集合编号改成一致,判断是不是属于同一个集合就是判断编号是不是一致。查询集合x,y是否是一个集合,判断rootx和rooty是否相等。对于每个节点x,假设p[x]为x的父节点,初始化p[x]=x。判断两个集合是否属于一个集合就是判断根节点是否相同。合并两个集合就是把一个集合和另一个集合的。* 判断两个集合是不是同属于一个集合。原创 2024-04-01 15:22:16 · 268 阅读 · 0 评论 -
exit&break
四平方和。原创 2024-04-01 12:41:30 · 260 阅读 · 0 评论 -
动态规划-背包问题-分组背包
容积为V的背包,放入N组物品,第i组物品有s[i]件,第i组第k件物品体积为w[i][k],价值为v[i][k]。每件物品最多拿一件,求体积不超过V条件下的最大价值。接下来N组数据每组:第一行输入一个整数s,表示数目;接下来s行包含两个整数w,v。dp[i][j]表示前i组物品,体积为j时的最大价值。枚举每组中的每个物品,取使价值达到最大的那一件。如何处理分组使得得到的价值最大?第一行:int N,int V。输出一个整数,表示最大价值。原创 2024-02-17 14:40:51 · 256 阅读 · 1 评论 -
动态规划-背包问题-完全背包
可见,更新dp[i][j]时,用的是同一行先前位置dp[i][j-w[i]]和上一行对应位置的dp[i-1][j],和01数组不同在于更新方向。使用单个数组更新时,采用从小到大的方向对dp数组进行覆盖。dp[i][j]表示前i种物品,体积为j时的最大价值。也就是说,每件物品可以拿0,1,…,完全背包中的每件物品有无数件。原创 2024-02-17 12:10:20 · 1095 阅读 · 1 评论 -
动态规划-背包问题-二维背包
二维背包代码简述,具体思路参考01背包。原创 2024-02-17 11:54:38 · 165 阅读 · 1 评论 -
动态规划-背包问题
更新dp[i][j]时,用到上一行对应位置dp[i-1][j]和上一行先前位置dp[i-1][j-w[i]]的元素,因此可以使用单个数组进行更新,直接从大到小对dp数组进行覆盖即可。给定一个容积为V的背包,现在有n件物品,第i件物品的体积为w i,价值为vi,每件物品只能拿或者不拿,请求出体积总和不超过V的最大价值。对于第i件物品,且第i件物品的体积比j小时,可能有拿or不拿两种状态。对于第i件物品,且第i件物品的体积比j大时,第i件物品一定不拿。dp[i][j]表示前i件物品,体积为j时的最大价值。原创 2024-02-12 08:56:16 · 968 阅读 · 0 评论