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

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

一、攻击次数

题目描述

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

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

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

解题思路

模拟战斗过程:

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

代码实现

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. 动态验证并更新最长结果

代码实现

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

代码实现

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. 跳过已使用字符

代码实现

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. 数学优化枚举过程

代码实现

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的最长序列
  • 枚举前驱树更新状态

代码实现

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)

代码实现

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的出现位置和
  • 计算每位对最终结果的贡献

代码实现

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)

相关文章:

  • [特殊字符] 第十七讲 | 随机森林:变量重要性识别与建模实战
  • 4月份到9月份看6本书第一天
  • 基于Flask-Login简单登录和权限控制实践
  • 句句翻译。
  • 平凡日子里的挣扎
  • 第7课:智能体安全与可靠性保障
  • 路由器开启QOS和UPNP的作用
  • AOSP14 Launcher3——手势模式下底部上滑的两种场景
  • Zabbix 简介+部署+对接Grafana(详细部署!!)
  • Redis-集群
  • 迷你世界脚本之容器接口:WorldContainer
  • 实例3.5.2 数字签名
  • ubuntu2204安装显卡驱动+多版本的cuda+cudnn+多版本tensorRT
  • Series和 DataFrame是 Pandas 库中的两种核心数据结构
  • 设计模式——建造者模式(生成器模式)总结
  • 【从0到1学Elasticsearch】Elasticsearch从入门到精通(上)
  • MySQL 5.7.43 二进制安装指南:从零开始的高效快速实现安装部署
  • 【C++】C与C++、C++内存空间、堆与栈
  • SAX解析XML:Java程序员的“刑侦破案式“数据处理
  • JS的大数运算(注意:原生的只支持整数计算!!!)
  • 陕西一村民被冒名贷款40余万续:名下已无贷款,将继续追责
  • 教育部基础教育教指委:稳步推进中小学人工智能通识教育
  • 消费维权周报|上周涉手机投诉较多,涉拍照模糊、屏幕漏液等
  • 泰特现代美术馆25年:那些瞬间,让艺术面向所有人
  • 第四轮伊美核谈判将于11日在阿曼举行
  • AI药企英矽智能第三次递表港交所:去年亏损超1700万美元,收入多数来自对外授权