第十三届蓝桥杯Python B组国赛题解(二)

简介: 第十三届蓝桥杯Python B组国赛题解

试题 F: 交通信号

a73403db712e4baaaa9c51eb2b4e50bd.png

17b45026ac1f46eea3ef0554d7f797c8.png

试题 G: 点亮

191899d5e0b34d5a9aee66696f9194f9.png

f9a5b412a9dc45ccaf7e4bb002f93a91.png


试题 H: 打折

23d0bcd8643c478cab7e226ecaf23024.png

710921b8f3d94d4980845d6db2950073.png

解题思路

  • 这道题使用暴力解题还是比较容易想出来的,可能会超时,但是能的一部分分是一部分
    大概就是,计算每一天需要花费的金额,选出花钱最少的
  • 不过暴力也是可以进行简单的优化,减少循环的次数,降低内存的占用。这样都可以加快程序运行的效率
n,m = map(int,input().split())
arr = []
max_day = 0
for i in range(m):
    s, t, p, c = map(int,input().split()) # 分别表示商店优惠的起始和结束时间、折扣率以及商店内的商品总数
    if t>max_day:
        max_day=t
    lst = []
    for j in range(c):
        a,b = map(int,input().split()) # 第 j 个商品的类型和价格
        lst.append((a,b))
    arr.append([s, t, p, c,lst])
result = []
for i in range(1,max_day+1):  # 循环的天数
    dic = {}
    for item in arr:
        if item[0] <= i and i <= item[1]:
            for index,value in item[4]:
                s = int(value * item[2] / 100)
                if index in dic:
                    if dic[index] > s:
                        dic[index] = s
                else:
                    dic[index] = s
        else:
            for index, value in item[4]:
                if index in dic:
                    if dic[index] > value:
                        dic[index] = value
                else:
                    dic[index] = value
    result.append(sum(dic.values()))
print(min(result))


试题 I: owo

2db7a9130c7e4c54b70c0e3635c646f1.png


我看有直接用全排列做题的,是一种解题的方式,在比赛中能写上就写上,但是我个人感觉时间复杂度太高了,等有合适的方法在写题解吧


试题 J: 替换字符


bf3b31ec7bd9480fa8169ac508c02948.png

我也不知道为什么这道题放最后,我个人感觉比上面的题简单

主要采用了切片和replace()函数

思路

将字符串分割成三部分,左中右,中间的字符串为待替换掉的部分,修改以后再将字符串拼接起来,

s = input()
m = int(input())
for i in range(m):
    nums = input().split()
    l = int(nums[0])
    r = int(nums[1])
    x = nums[2]
    y = nums[3]
    s1 = s[0:l-1]
    s2 = s[l-1:r]
    s3 = s[r:]
    s2 = s2.replace(x,y)
    s = s1+s2+s3
print(s)


注意 不能直接 s = s[l-1:r].replace(x, y) 这样修改,因为你这样修改后的s就是s[l-1:r]的字符串,其余的部分都被舍去了


比赛心得


能用内置函数解决绝不自己再重复造轮子,因为内置函数效率一般都很高

蓝桥杯是OI赛制,也就是提交答案之后赛后评判,根据通过的样例数量给分。所以对于一些难度比较高的题目,想不到合适的解决方法就用暴力,能跑对几个案例就多捞一点分

好像今年这一届对python的时间限制放宽了改为了10秒钟,所以用暴力解题也是一个好的选择

在比赛中,可能会因为太紧张,而出现读不懂题的情况,这时候小声读题能够让你的注意力更加的集中

合理安排时间不要陷人做题的牢笼,不要因为一道题而放弃所有,如果在一道题上花费了1个小时还没有解决,先暂时放弃,去做其他的题目,后面的题目可能对于你来说更加简单

关于试题的类型一般每年都差不多,备考阶段,根据自己的情况,由简入难,多思考,多刷题


相关文章
|
2月前
|
存储 机器学习/深度学习 算法
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
26 3
|
2月前
|
存储 算法 测试技术
第十五届蓝桥杯大赛 国赛 pb组F题【括号与字母】(15分) 栈的应用
第十五届蓝桥杯大赛 国赛 pb组F题【括号与字母】(15分) 栈的应用
17 1
|
2月前
|
Java
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
38 4
|
2月前
|
Java
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
27 3
|
2月前
|
Java
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
31 2
|
2月前
|
Java
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
18 1
|
2月前
|
存储 索引
6/1 第十五届蓝桥杯国赛pb组 真题本人答案 仅供参考
6/1 第十五届蓝桥杯国赛pb组 真题本人答案 仅供参考
31 4
|
2月前
|
存储 前端开发 算法
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
20 0
|
2月前
2022蓝桥杯大赛软件类国赛真题 卡牌
2022蓝桥杯大赛软件类国赛真题 卡牌
13 0
|
3月前
|
索引 Python 容器
【备战蓝桥杯】探索Python内置标准库collections的使用
【备战蓝桥杯】探索Python内置标准库collections的使用
75 1