试题 F: 交通信号
试题 G: 点亮
试题 H: 打折
解题思路
- 这道题使用暴力解题还是比较容易想出来的,可能会超时,但是能的一部分分是一部分
大概就是,计算每一天需要花费的金额,选出花钱最少的 - 不过暴力也是可以进行简单的优化,减少循环的次数,降低内存的占用。这样都可以加快程序运行的效率
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
我看有直接用全排列做题的,是一种解题的方式,在比赛中能写上就写上,但是我个人感觉时间复杂度太高了,等有合适的方法在写题解吧
试题 J: 替换字符
我也不知道为什么这道题放最后,我个人感觉比上面的题简单
主要采用了切片和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个小时还没有解决,先暂时放弃,去做其他的题目,后面的题目可能对于你来说更加简单
关于试题的类型一般每年都差不多,备考阶段,根据自己的情况,由简入难,多思考,多刷题