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

2025年 蓝桥杯省赛 Python A 组题目

文章目录

  • A.偏蓝
  • B.IPv6
  • C.2025图形
  • D.最大数字
  • E.倒水
  • F.拼好数
  • G.登山
  • H.原料采购

  • 近期复盘一下 省赛的题目,正所谓知不足方能进步
  • 可以在洛谷找到比赛的题目,不过得注意由于python版本的问题,有些代码想要在洛谷上ac的话,需要对应调整代码(不过这也是小问题啦,主要是反思代码的思路!!!)

比赛环境
在这里插入图片描述

A.偏蓝

A.偏蓝
在这里插入图片描述

  • 签到题,直接本地使用三层循环得出答案
ans = set()
for i in range(256):for j in range(i):for k in range(i):ans.add((i,j,k))
print(len(ans))
# 答案是 5559680

B.IPv6

B.IPv6

在这里插入图片描述
在这里插入图片描述

C.2025图形

.2025图形
在这里插入图片描述
在这里插入图片描述

  • 签到题+1:直接先构造好全部的字符串,然后使用一个滑动窗口输出即可
h,w = map(int,input().split())
# 由于总的字符串很短,所以可以先把对应的总的字符串求解出来
a = "2025"*100000for i in range(h):print(a[i:i+w])

D.最大数字

D.最大数字

在这里插入图片描述

  • 思路分析:显而易见,肯定是需要排序的,那么如何排序?排序的规则是什么?

  • 这个排序规则就十分巧妙:

    • 首先需要转化为字符串,对于字符串ab,如果确定它们的大小顺序?由于涉及到拼接的问题,所以a+b>b+a的时候,就说明a的排序价值更大,否则就是b的排序价值更大( 推荐先完成洛谷另一个类似的问题 拼数)
  • 洛谷ac代码

import sys 
sys.set_int_max_str_digits(10000000)
n = int(input())# 需要定义一个函数将十进制转化为二进制
num = []
for i in range(1,n+1):tmp = []while i :tmp.append(str(i&1))i = i >> 1num.append("".join(tmp[::-1]))num = [bin(i)[2:] for i in range(1,n+1)]# 再进行排序from functools import cmp_to_keydef cmp(a,b):if a+b > b+a:return -1else:return 1# else:3#   return 1num.sort(key=cmp_to_key(cmp))
finalnum = "".join(num)res = 1
ans = 0
for i in range(len(finalnum)-1,-1,-1):ans += int(finalnum[i])*resres *= 2
print(ans)
  • 比赛的时候,可以不用加上(因为比赛版本低,对于字符串转整数没有限制)
sys.set_int_max_str_digits(10000000)

在这里插入图片描述

E.倒水

E.倒水
在这里插入图片描述
在这里插入图片描述

  • 思路分析:求解是最大化最小值,所以是典型的二分问题
  • 对于二分题目不太掌握的同学可以看我的另一篇博客 蓝桥杯 之二分
# 二分问题,对于最大化最小值进行二分
n,k = map(int,input().split())
a = list(map(int,input().split()))def check(mid):num = a.copy()# 判断是否可以满足最少的水为mid for i in range(k):if num[i] < mid:return Falseaddnext = num[i] - midj = i + kwhile j < n :need = mid - num[j]if need > addnext:return Falseaddnext -= needj += kreturn Truel,r = 0,max(a)
ans = 0 
while l <= r:mid = (l+r)//2if check(mid):ans = max(ans,mid)l = mid + 1else:r = mid - 1
print(ans)

F.拼好数

F.拼好数
在这里插入图片描述
在这里插入图片描述

def count6(num):return str(num).count('6')n = int(input())
numbers = list(map(int, input().split()))
c = [0] * 7  # c[0] to c[6]for num in numbers:cnt = count6(num)if cnt >= 6:c[6] += 1else:c[cnt] += 1ans = c[6]
ptr = 1while c[5] > 0:cc = (1 if ptr == 5 else 1)if cc > c[ptr] or (ans + 1, c[5] - 1, c[ptr] - 1)[0] < cc:ptr += 1else:ans += 1c[5] -= 1c[ptr] -= 1while c[4] > 0 and c[1] > 1:c[4] -= 1c[1] -= 2ans += 1ptr = 2
while c[4] > 0:cc = (1 if ptr == 4 else 1)if cc > c[ptr] or (ans + 1, c[4] - 1, c[ptr] - 1)[0] < cc:ptr += 1else:ans += 1c[4] -= 1c[ptr] -= 1while c[3] > 0 and c[2] > 0 and c[1] > 0:c[3] -= 1c[2] -= 1c[1] -= 1ans += 1ans += (3 * c[3] + 2 * c[2]) // 6print(ans)

G.登山

G.登山
在这里插入图片描述
在这里插入图片描述

H.原料采购

H.原料采购
在这里插入图片描述
在这里插入图片描述

  • 思路分析:经典反悔堆问题
http://www.xdnf.cn/news/269101.html

相关文章:

  • 使用DeepSeek定制Python小游戏——以“俄罗斯方块”为例
  • 回溯算法详解(Java实现):从组合到排列的全面解析
  • 方案解读:华为-智慧园区数字平台技术方案【附全文阅读】
  • 安卓基础(MediaProjection)
  • Qt/C++源码/实时视音频通话示例/极低延迟/可外网通话/画中画/支持嵌入式板子
  • 赛季7靶场 -- Checker --User flag
  • 一键部署自己的私域直播
  • 生物化学笔记:神经生物学概论08 运动系统 人类逐渐建立运动技能 不同层次的运动发起
  • 第43周:GAN总结
  • python下载
  • CGI 协议是否会具体到通讯报文?
  • 节流 和 防抖的使用
  • C++类_初始化列表
  • Linux进程控制与替换详解
  • MySQL视图
  • 数据分析业务拆解底层思维
  • VMware Pro17.6虚拟机工具软件安装教程
  • 重塑数学边界:人工智能如何引领数学研究的新纪元
  • 动态库与ELF加载
  • LabVIEW三轴电机控制
  • 如何实现一个虚拟dom
  • 5月3日星期六今日早报简报微语报早读
  • Vue3学习笔记2——路由守卫
  • 修改或禁用Cursor的全局搜索默认快捷键
  • CSS 优化与渲染性能调研
  • Java变量简介
  • 【2025软考高级架构师】——软件专利(12)
  • 【STM32】定时器输出比较模式
  • C# 方法(控制流和方法调用)
  • 论面向方面编程及其应用