楠君的小窝
Markdown语法与外挂标签写法汇总
🥧本文汇总Markdown格式以及外挂标签在网页端的渲染效果,可作为文档进行查询
内存空间
这道题在Python B C 组都有,应该属于国赛的打卡题 解题思路 用哈希表存储内存用量 判断输入的表达式为数组还是普通表达式 按照type添加对应量的内存 将内存从小到大转化 输出 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647t = eval(input())memory = {'GB': 0, 'MB': 0, 'KB': 0, 'B': 0}for _ in range(t): s = input() if '[]' in s: byte = 4 i = 0 while i < len(s): if s[i] == '[': if s[i - 1] == 'g': ...
2023蓝桥杯总结
奖项贵州省 Python C 组 省1 第一 全国 Python C 组 省赛掌握的太少了,对于贪心和DP以及数论是我的薄弱点 国赛
2023蓝桥杯省赛
题目三国游戏这题我一开始只想到了暴力,在赛后根据提示得到正解排序+贪心 一开始使用的是组合+二分查找最大事件,但是肯定会超时。 对x,y,z三个国家进行排序,排序规则是这个国家减去另外两个国家的兵力的降序。最后对三个国家取一个max即可 有一个需要注意的点,在遍历的时候enumerate的start要设置为1,因为事件是从1开始。 1234567891011121314151617181920212223242526272829303132333435363738from sys import stdinn = eval(input())x = list(map(int, stdin.readline().split()))y = list(map(int, stdin.readline().split()))z = list(map(int, stdin.readline().split()))sort_x = sorted(range(n), key=lambda i: -(x[i] - y[i] - z[i]))sort_y = sorted(range(n), key=lamb ...
Python类属性与实例属性
类属性与实例属性 类属性会在程序运行时运行,而实例属性则只会在实例化后运行。 例子: 1234class A: print("类属性") def __init__(self): print("类实例属性") 当我们什么都不做时,python会输出类属性,当我们将A实例赋值给a后,python输出类实例属性,并且python不会再输出一遍类属性。 这是一个值得注意的一个点。 当使用Qt之类的时,我们在类属性内实例化窗口会导致程序崩溃。你需要将QApplication置顶实例。
蜂巢
这是蓝桥杯2022年Python的G题,其实这道题我在很久之前看到时被劝退,感觉自己写不出来,今天重新来挑战他,发现这道题没有运用任何变成知识,仅仅运用了直角坐标系(笛卡尔坐标系)。 看到这一题的第一眼肯定不会将他和坐标系联系在一起,第一想到的时DFS和BFS这种搜索算法,但是很可惜,这道题没有这么深。 解题思路 思路 根据图中显示,我们可以发现,从原点O(0, 0)出发,左上、左下、右上、右下,这4个方向每移动一次x +- 0.5, y +- 1 而向左或者向右只有 x +- 1 根据这个想法可以得出[[-1, 0], [-0.5, 1], [0.5, 1], [1, 0], [0.5, -1], [-0.5, -1]],下标从0开始,每个下标都对应着蜂巢的6个方向。 按照题目给的要求得到点B和点C 计算两点之间的距离,两点之间的路径就是abs(x1 - x2) + abs(y1 - y2)由于蜂巢向上向下移动一次是 ± 0.5,所以得到最终的表达式为abs(x1 - x2) + abs(y1 - y2) * 0.5。 若一个点向上向下移动能直接抵达另一个点,那么直接输出abs(y1 ...
LC343. 整数拆分
解题思路 按照动规五部曲 确定dp数组及其下标的含义 dp[i], i为要被拆分的整数,dp[i]为要被拆分的整数的最大乘积 确定递推公式 dp[i] = max(dp[i], j * (i - j), j * dp[i - j]) j * (i - j)是将数字拆分成两个正整数时的最大值 j * dp[i - j] 是将数字拆分成两个以上时的最大值,由于dp[i]前面以及被计算过了,所以可以直接得出拆分更多正整数的乘积 初始化dp数组 整数拆分0和1没有任何意义,所以只要关注2就行了,dp[2] = 1 确定遍历顺序 i从3开始遍历 j从1开始遍历 举例推导dp数组 代码 Python 12345678class Solution: def integerBreak(self, n: int) -> int: dp = [0 for _ in range(n + 1)] dp[2] = 1 for i in range(3, n + 1): for j in range(1, i - ...
LC63. 不同路径 II
解题思路 与LC62大致相似,多了一个路障,遇到路障时候跳过,若上i - 1或者j - 1是路障则不添加路线 首先dp[i][j]肯定是能到这个位置的所有路径 递推公式:dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 初始化:dp[i][j] = 0 遍历顺序:顺序遍历 代码 Python 12345678910111213141516class Solution: def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int: m = len(obstacleGrid) n = len(obstacleGrid[0]) if obstacleGrid[0][0] == 1: return 0 dp = [[0] * n for _ in range(m)] dp[0][0] = 1 for i in range(m): for j in range(n): ...
LC62. 不同路径
解题思路 题目给出了一个重要条件“机器人每次只能向下或者向右移动一步”由这个条件可以得出 当前的路径和与他的左边和上边的路径有关。[i - 1][j] 和 [i][j - 1] dp使用二维数组,dp[i][j]能到此处的所有路径和 得出推导公式为: dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 遍历顺序:顺序遍历 初始化:dp[0][0] = 1 代码 Python 12345678910class Solution: def uniquePaths(self, m: int, n: int) -> int: box = [[0] * n for _ in range(m)] box[0][0] = 1 for i in range(m): for j in range(n): if i == j == 0: continue if 0 <= i - 1: box[i][j] += box[i - 1][j] ...
LC746. 使用最小花费爬楼梯
解题思路 题目说从一个台阶向上爬需要付出cost[i]的费用,而每次只能爬1~2层台阶。 根据示例得出楼顶为cost[len(cost)]也就数组外。 由于每次只能爬1~2层台阶,那么我们可以直接从下标为3的地方开始顺序遍历。 递推公式:dp[i] = min(dp[i - 1], dp[i - 2]) 每次取前两个台阶的最小费用,这样就能达到最小费用了。 代码 Python 123456class Solution: def minCostClimbingStairs(self, cost: List[int]) -> int: if len(cost) == 2: return min(cost) for i in range(2, len(cost)): cost[i] += min(cost[i - 1], cost[i - 2]) return min(cost[-1], cost[-2]) C++ 12345678910class Solution {public: int minC ...
LC70. 爬楼梯
解题思路 首先顶楼<=2时直接返回n就行了 我们可以这么思考,每个台阶都是由他的前一个台阶和前前一个台阶上来的,而这两个台阶也是同理。 那么我们只要从前往后遍历(下标从3开始),每次将当前台阶的前两个台阶加起来,那么就是当前台阶的方法 推导公式:dp[i] = dp[i - 1] + dp[i - 2] 代码 Python 123456789class Solution: def climbStairs(self, n: int) -> int: if n <= 2: return n dp = [0 for _ in range(n + 1)] dp[1] = 1 dp[2] = 2 for i in range(3, n + 1): dp[i] = dp[i - 1] + dp[i - 2] return dp[n] C++ 12345678910111213class Solution {public: int climbStairs( ...
LC509. 斐波那契数
解题思路 斐波那契数列为前两项的和,第0项和第1项分别为0, 1. f(0) = 0 f(1) = 1 f(2) = f(0) + f(1) = 1 f(3) = f(2) + f(1) = 3 下标从2开始,从前往后遍历 f[n] = f[n - 1] + f[n - 2] 代码 Python 12345678910class Solution: def fib(self, n: int) -> int: if n <= 1: return n MOD = 10 ** 9 + 7 fib = [0 for _ in range(n + 1)] fib[1] = 1 for i in range(2, n + 1): fib[i] = fib[i - 1] + fib[i - 2] return fib[-1] % MOD C++ 1234567891011121314class Solution {public: int fib(int n) & ...
avatar
🐟认真摸鱼中
楠君的小窝
Live is so good
前往小窝
公告栏
--- 主域名 ---
fomal.cc | fomal.cn
--- 备用域名 ---
netlify.fomal.cc
cloudflare.fomal.cc
--- 网站安卓APP ---
🍧点此下载🍧
小站资讯
文章数目 :
111
本站总字数 :
6.3w
本站访客数 :
本站总访问量 :
最后更新时间 :
空降评论复制本文地址
随便逛逛昼夜切换关于博客美化设置切换全屏打印页面