2025第十六届蓝桥杯PythonB组部分题解

一、攻击次数

题目描述

小蓝操控三个英雄攻击敌人,敌人初始血量2025:

  • 第一个英雄每回合固定攻击5点
  • 第二个英雄奇数回合攻击15点,偶数回合攻击2点
  • 第三个英雄根据回合数除以3的余数攻击:余1攻2点,余2攻10点,余0攻7点

游戏从第1回合开始,当敌人血量≤0时结束,求结束时的回合数。

解题思路

模拟战斗过程:

  1. 每个回合依次计算三个英雄的攻击总和
  2. 更新敌人血量并检查是否≤0
  3. 注意回合数需减1(回合从1开始计数)

代码实现

python 复制代码
r = 2025
k = 1
while r > 0:
    r -= 5
    if k % 2 == 1:
        r -= 15
    else:
        r -= 2
    if k % 3 == 1:
        r -= 2
    elif k % 3 == 2:
        r -= 10
    else:
        r -= 7
    k += 1
print(k - 1)

二、最长字符串

题目描述

从单词本中找出最长优美字符串:

  • 长度为1时本身是优美字符串
  • 长度>1时,存在前n-1个字符重组后的优美字符串
  • 多个解时取字典序最小

解题思路

  1. 对单词去重并按长度、字典序排序
  2. 维护优美字符串集合
  3. 动态验证并更新最长结果

代码实现

python 复制代码
s = '''bbccbddbca'''
s = s.split('\n')
g = sorted(set(s), key=lambda x: (len(x), x))
v = set()
ans = ''
mx = -1
dd = []
for x in g:
    m = len(x)
    if m == 1:
        v.add(x)
        ans = x
        mx = 1
        dd.append(x)
    else:
        t = ''.join(sorted(x[:-1]))
        if t in v:
            dd.append(x)
            if m >= mx:
                mx = m
                ans = min([ans, x]) if m == mx else x
            v.add(''.join(sorted(x)))
dd = sorted(set(dd), key=lambda x: (-len(x), x))
print(ans)

三、LQ图形

题目描述

用字符Q绘制L型图案:

  • 竖笔划宽度w,高度h
  • 横笔划宽度v+w

解题思路

分两部分构建:

  1. 竖部:h行,每行w个Q
  2. 横部:w行,每行(v+w)个Q

代码实现

python 复制代码
w, h, v = map(int, input().split())
ans = []
for _ in range(h):
    ans.append(['Q']*w)
for _ in range(w):
    ans.append(['Q']*(v+w))
for row in ans:
    print(''.join(row))

四、最多次数

题目描述

从给定字符串s中切割最多数量的指定3字符组合(6种可能)。

解题思路

贪心策略:

  1. 滑动窗口遍历字符串
  2. 遇到有效组合立即标记使用
  3. 跳过已使用字符

代码实现

python 复制代码
s = input()
n = len(s)
v = [False]*n
d = {'lqb','lbq','qlb','qbl','blq','bql'}
ans = 0
for i in range(2, n):
    if not v[i-2] and not v[i-1] and s[i-2:i+1] in d:
        ans += 1
        v[i-2:i+1] = [True]*3
print(ans)

五、A * B Problem

题目描述

计算满足X_AX_B + Y_AY_B ≤ L的正整数组合数。

解题思路

  1. 预处理乘积频次
  2. 使用前缀和优化查询
  3. 数学优化枚举过程

代码实现

python 复制代码
def f2(l):
    from math import isqrt
    v = [0]*(l+1)
    for i in range(1, l+1):
        for j in range(i, l//i +1):
            if i*j <= l:
                v[i*j] += 2 - (i==j)
    p = [0]*(l+1)
    for i in range(1, l+1):
        p[i] = p[i-1] + v[i]
    return sum(v[i] * p[l-i] for i in range(1, l+1))
print(f2(int(input())))

六、园艺

题目描述

保留最长的等间隔递增树列。

解题思路

动态规划:

  • dp[i][d]表示以i结尾、间隔d的最长序列
  • 枚举前驱树更新状态

代码实现

python 复制代码
n = int(input())
a = list(map(int, input().split()))
dp = [[1]*(n+1) for _ in range(n)]
for i in range(n):
    for j in range(i):
        if a[i]>a[j] and (d:=i-j):
            dp[i][d] = max(dp[i][d], dp[j][d]+1)
print(max(max(row) for row in dp))

七、书架还原

题目描述

通过交换操作将乱序书恢复顺序,求最少操作次数。

解题思路

环分解:

  • 每个环需要(环长-1)次操作
  • 总次数=Σ(环长-1)

代码实现

python 复制代码
n = int(input())
a = list(map(int, input().split()))
vis = [False]*n
ans = 0
for i in range(n):
    if not vis[i] and a[i]!=i+1:
        cnt = 0
        j = i
        while not vis[j]:
            vis[j] = True
            j = a[j]-1
            cnt += 1
        ans += cnt-1
print(ans)

八、异或和

题目描述

计算ΣΣ(a_i⊕a_j)*(j-i)的值。

解题思路

按位统计贡献:

  • 维护每位0/1的出现位置和
  • 计算每位对最终结果的贡献

代码实现

python 复制代码
n = int(input())
a = list(map(int, input().split()))
ans = 0
for bit in range(20):
    cnt0 = cnt1 = sum0 = sum1 = 0
    for i in range(n):
        if (a[i] >> bit) & 1:
            ans += (cnt0*i - sum0) * (1<<bit)
            cnt1 += 1
            sum1 += i
        else:
            ans += (cnt1*i - sum1) * (1<<bit)
            cnt0 += 1
            sum0 += i
print(ans)
相关推荐
爱喝白开水a8 分钟前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
默默coding的程序猿2 小时前
3.git的分支携带问题是什么?怎么解决?
java·git·python·svn·gitee·github·intellij-idea
新子y3 小时前
【小白笔记】PyTorch 和 Python 基础的这些问题
pytorch·笔记·python
我是李武涯3 小时前
PyTorch DataLoader 高级用法
人工智能·pytorch·python
Lynnxiaowen4 小时前
今天我们开始学习python语句和模块
linux·运维·开发语言·python·学习
ThreeAu.4 小时前
pytest 实战:用例管理、插件技巧、断言详解
python·单元测试·pytest·测试开发工程师
资源补给站5 小时前
服务器高效操作指南:Python 环境退出与 Linux 终端快捷键全解析
linux·服务器·python
一苓二肆5 小时前
代码加密技术
linux·windows·python·spring·eclipse
青春不败 177-3266-05205 小时前
AI+Python驱动的无人机生态三维建模与碳储、生物量、LULC估算技术
人工智能·python·无人机·生态学·遥感·多光谱遥感
将车2445 小时前
selenium实现自动化脚本的常用函数
python·selenium·自动化