当前位置: 首页 > news >正文

lqb官方题单-速成刷题清单(上) - python版

预计3月5日 Wednesday 前完成
【2025年3月1日,记】题目太简单了,3月3日前完成

在这里插入图片描述
蓝桥杯速成刷题清单(上)
https://www.lanqiao.cn/problems/1216/learning/?problem_list_id=30&page=1
替换题号1216
在这里插入图片描述

目录

  • 进度
    • 题解和碎碎念
      • 1. 排序
        • 题面
        • 小结
        • ac代码
      • 2. 走迷宫
        • 题面
        • 小结
        • ac代码
      • 3. 小明的背包1
        • 题面
        • 小结
        • ac代码
      • 4. 蓝桥公园
        • 题面
        • 小结
        • ac代码
      • 5. 回文判定
        • 题面
        • 小结
        • ac代码
        • 题面
        • 小结
        • ac代码
        • 题面
        • 小结
        • ac代码
        • 题面
        • 小结
        • ac代码
        • 题面
        • 小结
        • ac代码

进度

题解和碎碎念

1. 排序

题面

太容易,快排内置的 sorted()

小结
ac代码
import os
import sys

# 请在此输入您的代码
N = int(input())
line = sys.stdin.readline().strip()

ls = list(map(int, line.split()))
sorted1 = sorted(ls)

sorted2 = sorted(ls, key= lambda x:-x)

print(" ".join(map(str, sorted1)))
print(" ".join(map(str, sorted2)))

2. 走迷宫

题面

太 ez,就一个 DFS,用内置的 queue

小结

python 内置 queue 用法简介

import queue

q = queue.Queue()
q.put((x, y, cnt))  # 放入
(x, y, cnt) = q.get()  # 取出

if q.empty():  # 判断是否为空
	pass

python 内置集合 set() 用法

visited = set()
visited.add((x, y))
if (x, y) in visited:
	pass
	
visited.discard((x, y))  # 从集合中删除元素,若不存在,不报错
removed = visited.pop()  # 随机删一个,并返回,为空时报错
visited.clear()  # 清空整个集合

if len(visited) == 0:
	print("Visited is empty")
ac代码
import os
import sys
import queue

# 请在此输入您的代码
line = sys.stdin.readline().strip()
N, M = map(int, line.split())

matrix = []
for _ in range(N):
    line = sys.stdin.readline().strip()
    ls = list(map(int, line.split()))
    matrix.append(ls)

line = sys.stdin.readline().strip()
xin, yin, xout, yout = map(int, line.split())

xin -= 1
yin -= 1
xout -= 1
yout -= 1

moves = [[-1, 0], [0, -1], [1, 0], [0, 1]]

q = queue.Queue()
q.put((xin, yin, 0))
visited = set()
success = False

while not q.empty() and not success:
    # print(queue.popleft())
    (x, y, cnt) = q.get()
    # print(f'x= {x}, y= {y}, cnt= {cnt}')
    for move in moves:
        x1 = x + move[0]
        y1 = y + move[1]

        if x1 < 0 or x1 >= N or y1 < 0 or y1 >= M or matrix[x1][y1] != 1 or (x1, y1) in visited:
            pass
        else:
            if x1 == xout and y1 == yout:
                print(cnt + 1)
                success = True
                break
            else:
                q.put((x1, y1, cnt + 1))
                visited.add((x1, y1))

if not success:
    print("-1")

3. 小明的背包1

题面

太 ez,最最最基础的 01 背包(当然,我不会啦~

小结

这篇讲的好好(虽然我只学了最基础的 01 背包,难的以后我遇到再学,一定会学的
背包问题详解(01背包,完全背包,多重背包,分组背包)
用二维 dp 记录,核心代码如下

# dp[m][n] 考虑m件物品,在空间不超过n时最大收益
dp = [[0 for _ in range(V + 1)] for _ in range(N + 1)]

for j in range(1, V + 1):
    for i in range(1, N + 1):
        dp[i][j] = dp[i - 1][j]
        if item[i - 1][0] <= j:
            dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - item[i - 1][0]] + item[i - 1][1])

有两个易错点:

  1. 那个 dp 初始化,我最开始不是用的两个 range,后一个是直接 * 。结果就遇到了 python 的 生成多个对同一行列表的引用,而不是独立的列表,这会导致修改其中任何一行时,其他行也会受到影响 debug 好一会…
  2. 忘记了 if 前面那个初始化,wa 了一半测试点…
ac代码
import sys

line = sys.stdin.readline().strip()
N, V = map(int, line.split())

item = []
for _ in range(N):
    line = sys.stdin.readline().strip()
    w, v = map(int, line.split())
    item.append([w, v])

# dp[m][n] 考虑m件物品,在空间不超过n时最大收益
dp = [[0 for _ in range(V + 1)] for _ in range(N + 1)]

for j in range(1, V + 1):
    for i in range(1, N + 1):
        dp[i][j] = dp[i - 1][j]
        if item[i - 1][0] <= j:
            dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - item[i - 1][0]] + item[i - 1][1])

print(dp[N][V])

4. 蓝桥公园

题面

ez,Floyd 模板题,骂骂咧咧,什么破题,故意卡 python 是吧

小结

多源最短通路 Floyd 算法——3个循环,通过中心点更新

# i:中间点,j k:起点 终点
# idx2content:记录路径
for i in range(1, N + 1):
    for j in range(1, N + 1):
        for k in range(1, N + 1):
            if dist[j][k] > dist[j][i] + dist[i][k]:
                dist[j][k] = dist[j][i] + dist[i][k]
                dist[k][j] = dist[j][k]
                idx2content[j][k] = i
                idx2content[k][j] = i

补充 单源最短路径 Dijkstra算法
在这里插入图片描述
讲的很好
补充 最小生成树

# 这个代码不对哈
# 最小不是从 dist_new,应该是 visited 里有的点到外界的最小
idx2content = [float('inf') for _ in range(N + 1)]
while len(visited) != N:
    dist_new = copy.deepcopy(dist[new])
    while True:
        min_value = min(dist_new)
        min_idx = dist_new.index(min_value)
        if min_idx not in visited:
            idx2content[new] = min_idx
            new = min_idx
            visited.add(min_idx)
        dist_new[min_idx] = float('inf')

ps. 笑死了,最开始把最小生成树当成 Floyd 交了,还过了一些数据点

ac代码

5. 回文判定

题面

秒了

小结
ac代码
import sys

line = sys.stdin.readline().strip()
if line == line[::-1]:
    print("Y")
else:
    print("N")

题面
小结
ac代码

题面
小结
ac代码

题面
小结
ac代码

题面
小结
ac代码

相关文章:

  • AI 实战2 - face -detect
  • Open3D解决SceneWidget加入布局中消失的问题
  • composer 错误汇总
  • 排序算法(3):
  • Dify Workflows MCP Server (TypeScript)设计与实战
  • 人工智能之数学基础:线性代数中矩阵的运算
  • 极简本地体验deepseek大模型教程
  • 蓝牙接近开关模块感应开锁手机靠近解锁支持HID低功耗
  • Window下Redis的安装和部署详细图文教程(Redis的安装和可视化工具的使用)
  • 爱普生可编程晶振 SG-8101CE 在智能家居领域展现出的优势
  • 【机器学习】逻辑回归(Logistic Regression)
  • 散户如何实现自动化交易下单——篇1:体系介绍与获取同花顺资金账户和持仓信息
  • mysql安装教程,超详细图文教程(附安装包)MySQL8.0安装教程
  • virtualbox安装ubuntu,配置静态ip
  • UnrealEngine UE5 可视化 从地球观察火星 金星 土星 运动轨迹
  • 【Android】安卓付款密码输入框、支付密码输入框
  • 基于PLC的智能窗控制系统设计
  • Spring Boot 拦截器(Interceptor)
  • 目标检测——数据处理
  • 嵌入式晶振细究
  • 怎样在工商网站做遗失/百度官网认证免费
  • 辽宁省建设工程信息网a类业绩/网络seo首页
  • 网站设计介绍/seo五大经验分享
  • 中国搜索提交网站/游戏app拉新平台
  • 领优惠券的网站是怎么做的/seo排名优化价格
  • 兰州移动端网站建设/优化大师的使用方法