2025第十六届蓝桥杯python B组满分题解(详细)

目录

前言

A:  攻击次数

 解题思路:

代码:

B:  最长字符串

解题思路:

代码:

C:  LQ图形

解题思路:

代码:

D:  最多次数

 解题思路:

代码:

 E:  A * B Problem

解题思路:

代码:

F:  园艺

​编辑

解题思路:

代码:

G:书架还原

解题思路: 

代码:

H:  异或和

解题思路:

代码:

结论:


前言

此次蓝桥杯共8道题(2道填空,6道编程)满分100。与去年的题相比难度降低了不少,第一道编程题简直送分,刚学的小白估计也会。我本人大一,刚学python不久,我只能说这次比赛中基本没用到什么算法,全是暴力,考前学习的DFS,BFS,二维前缀差分等等都没用上,虽然比赛中有的题我暴力也没做出来。当然,这套题想拿高分也不容易,面对巨大数据量,时间复杂度是个问题。

下面给大家分享一下满分题解,是我赛后重做,又综合各个大佬的题解做出的。以下代码在洛谷均可通过,现在蓝桥官网上还没更新,不知在蓝桥官网上测评如果。欢迎各位大佬对我的题解进行点评指正。

A:  攻击次数

 解题思路:

这道题没什么难度,但有个小坑,正确结果为103,我估计会有不少人结果为104。这里需要注意的是在103回合后,血量已经小于0,但在下个while循环中,回合数仍+1,所以最后结果要-1。

代码:

n=2025
i=1
while n>0:atk = 5if i%2==1:atk+=15else:atk+=2if i%3==1:atk+=2if i%3==2:atk+=10if i%3==0:atk+=7n-=atki+=1
print(i-1)

B:  最长字符串

 这道题有难度,比赛时没啥思路,50000个数据当时让电脑死机两回

解题思路:

想做对当然要先完全理解题目的啦。这里难点在于若s4是优美字符串,那么s3,s2,s1都必须是优美字符串。什么是字典序最小?简单来说就是如果相同长度,其字母在字母表中排位越靠前,字典序越小。例如 'abc'<'abd'。

  • 为了方便遍历,要将50000个数据转换化成列表形式
  • 先对列表按照长度排序,短的放在前面,因为长字符串是否符合需要短字符串进行辅助
  • 建立一个seen集合,从短到长存储长度为1的字符串与不同长度的优美字符串
  • 利用sorted()可将乱序字符串按字典序改成统一的顺序进行判断
  • 利用for循环,从短到长依次判断。(txt文档可在博客顶部下载)

代码:

l=        # 将txt中的所有数据复制到三引号内即可,此处省略
'''
tdasm
ciswmz
.
.
.
'''
l=l.split('\n')
l=list(set(l))    # 删除重复数据
l.sort(key = len)
seen = set()
ret = ''for i in l:if len(i) == 1:seen.add(i)else:ss = sorted(i[:-1])m=''.join(ss)if m in seen:ans = ''.join(sorted(i))seen.add(ans)if len(i) > len(ret):   # 长度最长ret = ielif i < ret:           # 字典序最小ret = iprint(ret)

C:  LQ图形

解题思路:

超级简单,两个for循环 

代码:

w,h,v=map(int,input().split())
for i in range(h):print('Q'*w)
for j in range(w):print('Q'*(v+w))

D:  最多次数

 解题思路:

  • 建立一个包含六种可能的列表
  • 利用while循环切片,若在列表中计数加1

代码:

n=input()
num=0
i=0
seen1=['l','q','b']  
seen2=['lqb','lbq','qlb','qbl','blq','bql']while i<=len(n)-3:if n[i] in seen1:   # 减少不必要的切片操作ans=n[i:i+3]if ans in seen2:num+=1i+=3else:i+=1else:i+=1
print(num)

 E:  A * B Problem

有点难度,比赛时没啥思路,纯暴力的话应该可以通过40%--80%的数据,但要想全通过就要用到数论中约数个数与约数个数前缀和之间的计数关系

解题思路:

  • 建立列表a,计算1--L 每一个数的约数个数
  • 建立列表b,计算约数个数的前缀和
  • 约数个数与约数个数前缀和乘积的累加

代码:

L=int(input())
ans=0
a=[0]*(L+1)
b=[0]*(L+1)for i in range(1,L+1):for j in range(i,L+1,i):a[j]+=1          #约数个数计数器 +1for i in range(1,L+1):b[i]=b[i-1]+a[i]     #前缀和数组for i in range(1,L+1):ans+=a[i]*b[L-i]     #统计答案
print(ans)

F:  园艺

解题思路:

  • 这道题类似于求最长递增子序列,利用动态规划来做
  • 建立一个dp数组,用来记录每一个以第i棵为结尾,d为间隔的棵树数据
  • 遍历全部dp数组,找到最大值

代码:

n = int(input())
a = list(map(int, input().split()))
dp = [[1] * (n + 1) for i in range(n)]for i in range(n):for j in range(i):if a[i] > a[j]:   # 满足高度递增d = i - j     # d为两树之间间隔dp[i][d] = max(dp[i][d], dp[j][d] + 1)ans = 0
for row in dp:if max(row)>ans:   # 找最大值ans=max(row)   
print(ans)

G:书架还原

我第一反应是利用两个for循环,虽然思路是对的,但时间复杂度太高,但只通过了30%的数据

解题思路: 

  • 要想操作次数最少,必须每一次操作都至少有一本书归放原处
  • 从第一个为位置开始,定住一个位置,若此书理应不在此位置,进入while循环
  • 在循环中,将此位置的书放回原位置,而原位置的书拿过来,再次进行while判断

代码:

n = int(input())
nums = list(map(int, input().split()))
count = 0for i in range(n):while i != nums[i] - 1:ans = nums[i]nums[i] = nums[ans - 1]     nums[ans - 1] = ans      # 书归原处count += 1
print(count)

H:  异或和

涉及到双重求和,求两个数的异或和可以用“ ^ ” 内置函数,比赛时忘了这个东西可以求异或和

利用for循环嵌套可以暴力通过40%的数据,这就是8分啊,比赛时能得到这8分也很不错了。

暴力代码:(只能通过40%数据,仅供参考)

n = int(input())
nums = list(map(int, input().split()))
ans = 0for i in range(n):for j in range(i+1, n):x=j - ians += (nums[i] ^ nums[j]) * x
print(ans)

如果要的满分要涉及到位运算,二进制每一位对最后结果的贡献。

解题思路:

  • 数据最大值的二进制有多少位,外循环就遍历多少次
  • 内循环从最小位开始,拿出每个数据二进制的第i位,只有当两个数一个为0一个为1时,才会对最后结果产生贡献,因为按位异或的原理为同为0,异为1。

代码:

n = int(input())
a = list(map(int, input().split()))
ans = 0
bit = 1   # 权重初始为1s=bin(sorted(a)[-1])[2:]
for i in range(len(s)):dex0 = 0       # 当前位为0的下标和dex1 = 0       # 当前位为1的下标和count0 = 0     # 当前位为0的个数count1 = 0     # 当前位为1的个数for j in range(n):current = a[j]if (current >> i) & 1:  # 判断此位是否为1index=j + 1         # 下标值=索引值+1ans += bit * (index * count0 - dex0)  # 此位对最后结果的贡献dex1 += indexcount1 += 1else:index = j + 1ans += bit * (index * count1 - dex1)dex0 += indexcount0 += 1bit <<= 1      # 按位的权重*2
print(ans)

附:以题目所给[9,8,7,6]为例,计算第一次内循环的贡献为6。 ans=6+16+32+64=118

附:按位异或规则

结论:

总的来说,全用暴力也可以取得一个不错的成绩,想要高分还是有点难度的。本人是一个初学算法的大一小白,提供的代码和作图若有错误,欢迎各位大佬的点评指正,最后祝愿每一位参赛者都可以取得一个好成绩!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/902362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十二节:原理深挖-React Fiber架构核心思想

链表结构、时间切片&#xff08;Time Slicing&#xff09; 优先级调度实现&#xff08;如用户输入>网络请求&#xff09; React Fiber架构深度解析&#xff1a;从链表到优先级调度的革命性升级 一、Fiber架构核心设计思想 React Fiber是React 16的底层协调算法重构&#x…

你学会了些什么211201?--http基础知识

概念 HTTP–Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff1b;是一种建立在TCP上的无状态连接&#xff08;短连接&#xff09;。 整个基本的工作流程是&#xff1a;客户端发送一个HTTP请求&#xff08;Request &#xff09;&#xff0c;这个请求说明了客户端…

MCU开发学习记录8 - 基本定时器学习与实践(HAL库) - 定时器DMA循环模式修改ARR值、定时器中断方式修改ARR值 - STM32CubeMX

名词解释&#xff1a; TRGO&#xff1a;Trigger Out General Purpose Output ARR&#xff1a;Auto-reload PSC&#xff1a;Prescaler CNT&#xff1a;Counter EGR&#xff1a;event generation register 本文将介绍基本定时器的概念、相关函数以及STM32CubeMX生成定时器的配置…

考研系列-计算机网络冲刺考点汇总(上)

写在前面 本文将总结王道408考研课程的计算机网络冲刺考点的第一章到第三章内容&#xff08;计算机网络体系结构、物理层、数据链路层&#xff09;。【图片较多&#xff0c;加载需要时间&#xff0c;可以提前打开加载~~】 第一章、计算机网络体系结构 注意&#xff1a;PCI(头部…

设计模式每日硬核训练 Day 14:组合模式(Composite Pattern)完整讲解与实战应用

&#x1f504; 回顾 Day 13&#xff1a;桥接模式小结 在 Day 13 中&#xff0c;我们学习了桥接模式&#xff08;Bridge Pattern&#xff09;&#xff1a; 用于将“抽象”与“实现”分离&#xff0c;适用于双维度变化场景&#xff08;如图形类型 渲染方式&#xff09;。它强调…

讯联桌面TV版apk下载-讯联桌面安卓电视版免费下载安装教程

在智能电视的使用过程中&#xff0c;一款好用的桌面应用能极大提升我们的使用体验。讯联桌面 TV 版就是这样一款备受关注的应用&#xff0c;它可以让安卓电视拥有更个性化、便捷的操作界面。今天&#xff0c;就为大家详细介绍讯联桌面 TV 版 apk 的免费下载安装教程。 一、下载…

Nginx知识点

Nginx发展历史 Nginx 是由俄罗斯程序员 Igor Sysoev 开发的高性能开源 Web 服务器、反向代理服务器和负载均衡器 &#xff0c;其历史如下&#xff1a; 起源与早期开发&#xff08;2002 - 2004 年&#xff09; 2002 年&#xff0c;当时 Igor Sysoev 在为俄罗斯门户网站 Rambl…

uview1.0 tabs组件放到u-popup中在微信小程序中滑块样式错乱

解决思路 重新计算布局信息&#xff1a;在弹窗显示后重新调用 init 方法来计算组件的布局信息。使用 nextTick&#xff1a;保证在视图更新之后再进行布局信息的计算。 <u-tabs ref"tabsRef" ></u-tabs> makeClick(){this.makeShowtruethis.$nextTick…

腾讯一面-软件开发实习-PC客户端开发方向

1.自我介绍就不多赘述了 2. 请介绍一下你的项目经历 - 介绍了专辑鉴赏项目&#xff0c;前端使用html语言编写&#xff0c;后端基于http协议使用C语言进行网页开发。此外&#xff0c;还提及项目中涉及处理多线程问题以及做过内存池管理项目。 3. 项目中HTTP协议是使用库实现的…

[数据可视化] Datagear使用心得:从数据整备到可视化联动实践

Datagear 是一款功能强大的数据可视化与报表工具&#xff0c;在日常数据分析与展示过程中&#xff0c;能有效帮助用户构建交互式报表与面板。本文结合实际使用场景&#xff0c;总结了在 Datagear 平台上关于元数据整备、Board 面板设计、图表嵌入等方面的使用经验&#xff0c;供…

【音视频】MP4解封装

一、概述 实现了读取mp4文件&#xff0c;提取出h264和aac文件&#xff0c;可以直接播放 二、实现过程 准备文件 在build路径下添加mp4文件 同时&#xff0c;添加main函数参数&#xff0c;表示输入文件和输出文件 打开文件 打开输入文件&#xff0c;初始化格式上下文 char…

idea2024.1双击快捷方式打不开

idea2024.1突然双击快捷方式打不开&#xff0c;使用管理员运行也打不开 在安装的idea路径下的bin目录下双击打开idea.bat文件&#xff0c;要是打不开使用txt格式打开&#xff0c;打开后在最后一行加上pause&#xff0c;之后保存。 看看报错信息是不是有一个initializedExcept…

【错误记录】Windows 命令行程序循环暂停问题分析 ( 设置 “ 命令记录 “ 选项 | 启用 “ 丢弃旧的副本 “ 选项 | 将日志重定向到文件 )

文章目录 一、报错信息二、问题分析1、Windows 命令行的缓冲区机制2、命令记录设置 三、解决方案1、设置 " 命令记录 " 选项2、将日志重定向到文件 一、报错信息 Java 程序中 , 设置 无限循环 , 每次循环 休眠 10 秒后 , 再执行程序逻辑 , 在命令行中打印日志信息 ; …

STM32H5开发陀螺仪LSM6DSV16X(1)----轮询获取陀螺仪数据

STM32H5开发陀螺仪LSM6DSV16X.1--轮询获取陀螺仪数据 概述视频教学样品申请源码下载硬件准备参考程序通信模式管脚定义IIC通信模式速率新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Op…

Android端使用无障碍服务实现远程、自动刷短视频

最近在做一个基于无障碍自动刷短视频的APP&#xff0c;需要支持用任意蓝牙遥控器远程控制&#xff0c; 把无障碍服务流程大致研究了一下&#xff0c;从下面3个部分做一下小结。 1、需要可调整自动上滑距离和速度以适配不同的屏幕和应用 智能适配99%机型&#xff0c;滑动参数可…

Spark和Hadoop的区别和联系

Hadoop 和 Spark 的区别 1. 架构 Hadoop&#xff1a;基于 HDFS&#xff08;分布式文件系统&#xff09;和 MapReduce&#xff08;分布式计算框架&#xff09;。HDFS 负责数据的分布式存储&#xff0c;而 MapReduce 是其主要的计算框架&#xff0c;通过 Map 和 Reduce 任务进行…

【版本控制】idea中使用git

大家好&#xff0c;我是jstart千语。接下来继续对git的内容进行讲解。也是在开发中最常使用&#xff0c;最重要的部分&#xff0c;在idea中操作git。目录在右侧哦。 如果需要git命令的详解&#xff1a; 【版本控制】git命令使用大全-CSDN博客 一、配置git 要先关闭项目&#xf…

论文阅读:2023 arxiv A Survey of Reinforcement Learning from Human Feedback

A Survey of Reinforcement Learning from Human Feedback https://arxiv.org/pdf/2312.14925 https://www.doubao.com/chat/3506943124865538 速览 这篇论文是关于“从人类反馈中进行强化学习&#xff08;RLHF&#xff09;”的综述&#xff0c;核心是讲如何让AI通过人类反…

单片机 + 图像处理芯片 + TFT彩屏 进度条控件

进度条控件使用说明 概述 本进度条控件基于单片机 RA8889/RA6809 TFT开发&#xff0c;提供了简单易用的进度显示功能。控件支持多个进度条同时显示、自定义颜色、边框和标签等特性&#xff0c;适用于需要直观显示进度信息的各类应用场景。 特性 支持多个进度条同时显示可…

数据处理: OPTICS聚类及Python实现

1. 基本原理 OPTICS&#xff08;Ordering Points To Identify the Clustering Structure&#xff09;是一种基于密度的聚类算法&#xff0c;可视为DBSCAN的改进版本。它能够识别不同密度的簇&#xff0c;并自动发现数据中的层次化聚类结构&#xff0c;适用于复杂分布的数据集…