大家好,我是爱分享的小蓝,欢迎大家来对答案~
全文目录
🏆混奖感言
⭐试题 A: 排列字母
💡思路点拨
🍞代码详解
⭐试题 B: 寻找整数
💡思路点拨
🍞代码详解
⭐试题 C: 纸张尺寸
🚀传送锚点
💡思路点拨
🍞代码详解
⭐试题 D: 数位排序
🚀传送锚点
💡思路点拨
🍞代码详解
⭐试题 E: 蜂巢
🚀传送锚点
💡思路点拨
🍞代码详解
⭐试题 F: 消除游戏
🚀传送锚点
💡思路点拨
🍞代码详解
⭐试题 G: 全排列的价值
🚀传送锚点
💡思路点拨
🍞代码详解
⭐试题 H: 技能升级
🚀传送锚点
💡思路点拨
🍞代码详解
⭐试题 I: 最长不下降子序列
🚀传送锚点
💡思路点拨
🍞代码详解
⭐试题 J: 最优清零方案
🚀传送锚点
💡思路点拨
🍞代码详解
💌考后寄语
🏆混奖感言
首先感谢关注我的小伙伴们!你们都太棒啦!小蓝为你们感到骄傲!\(@^0^@)/
嘿嘿,小蓝第一次参加,混了个省二🥈
心路过程
哇塞!看到自己的名字在获奖名单里,直接从座位上蹦起来,开心地做了10个开合跳 \ ^o^ /
心想:我的300块终于可以回来了,300块报名费没有打水漂,嘿嘿~美滋滋~ ✪ ω ✪
但仔细一算成绩,自己占总人数的12%,还差2%就能变省一,可能就差那2分···啊咧 (っ °Д °;)っ
认清现实,不能去国赛和小伙伴见面了,手里的鸡腿瞬间不香了···大脑空白ing o_o ....
痛定思痛,必须反思!刨根问底,找出原因!问自己5个why???
分析原因
为什么没得省一?因为分数低。
为啥分数低?因为题目做不出来。
为啥题目做不出来?因为考试太紧张了,大脑一片空白。
为啥考试会紧张?因为准备不充足,担心考不好。
为啥准备不充足?因为学习没有规划,学习效率太低,考试过于焦虑。
找到自身的3个原因后,那我接下来该怎么做?
解决方案
1、制定计划:考前一个月制定详细的刷题计划。(滴答清单)
2、高效刷题:高效率专注认真的刷题。(番茄钟,柳比歇夫时间管理法)
3、心理平衡:保持内心情绪的稳定平和。(轻音乐)
⭐试题 A: 排列字母
💡思路点拨
第一题打卡题,就挺简单滴~
考python基础语法:字符串排序sorted() + 字符串连接"".join()
🍞代码详解
#试题A:排列字母
s="WHERETHEREISAWILLTHEREISAWAY"
print("".join(sorted(s)))
#AAAEEEEEEHHHIIILLRRRSSTTWWWY'''
样例测试1:
s="LANQIAO"
print(sorted(s))
print("".join(sorted(s)))
['A', 'A', 'I', 'L', 'N', 'O', 'Q']
AAILNOQ样例测试2:
s="GOODGOODSTUDYDAYDAYUP"
print("".join(sorted(s)))
AADDDDDGGOOOOPSTUUYYY
'''
⭐试题 B: 寻找整数
💡思路点拨
第二题,难度直接起飞!第一题就是个幌子,第二题开始光明正大的上难度了。
这题纯靠暴力解法,小蓝考试时不会做,直接枚举49组数据,结果一天都跑不完!
后来发现了大佬的方法,真是妙绝!下面这道题解法参考大佬思路:2022第十三届蓝桥杯PythonB组_ephemeral-fever的博客-CSDN博客
还可以找规律用最小公倍数做出来,下面参考大佬的解法:
第十三届蓝桥杯Python B组第二题_一天掉10根头发的博客-CSDN博客
接下来拿出新手必会的大杀器来做——暴力解法!
暴力求解谁都会,关键是什么呢?如何优化代码,能在比赛的2小时内跑完程序。
最好的方法就是找规律,发现数据之间的联系~
从枚举一个个数据:每次+1
到枚举一批批的数据:每次+38137680
速度直接起飞~
暴力三步走:
1.枚举数据找规律:取表后面5个大数判断更容易找到大数据,得到关键数据。
2.找出规律求公式:这些数字是按判断求得的,所以一定存在公式。
3.遍历公式找答案:通过公式进行快速遍历,30s轻松找到十六位数的答案。
🍞代码详解
#1.枚举数据找规律
i=1
while True:flag=Trueif i%49!=46:flag=Falseif i%48!=41:flag=Falseif i%47!=5:flag=Falseif i%46!=15:flag=Falseif i%45!=29:flag=Falseif flag:print(i)i+=1
'''
4772009
42909689
81047369
119185049
157322729
···
'''
#2.找出规律求公式
a=[4772009, 42909689, 81047369, 119185049,157322729]
#发现存在等差数列
print(a[1]-a[0])#38137680
print(a[2]-a[1])#38137680
print(a[3]-a[2])#38137680
k=38137680
b=4772009
#求出公式
y=k*x+b
#3.遍历公式找答案
#题目数据
mod = [(2, 1), (14, 11), (26, 23), (38, 37),(3, 2), (15, 14), (27, 20), (39, 23),(4, 1), (16, 9), (28, 25), (40, 9),(5, 4), (17, 0), (29, 16), (41, 1),(6, 5), (18, 11), (30, 29), (42, 11),(7, 4), (19, 18), (31, 27), (43, 11),(8, 1), (20, 9), (32, 25), (44, 33),(9, 2), (21, 11), (33, 11), (45, 29),(10, 9), (22, 11), (34, 17), (46, 15),(11, 0), (23, 15), (35, 4), (47, 5),(12, 5), (24, 17), (36, 29), (48, 41),(13, 10), (25, 9), (37, 22)]
#遍历公式
x=0
k=38137680
b=4772009
while True:flag=Truey=k*x+bfor i,j in mod:if y%i !=j:flag=Falsebreakif flag==True:print(y)#2022040920220409breakx+=1
⭐试题 C: 纸张尺寸
🚀传送锚点
💡思路点拨
这道题其实挺简单的,找到规律就能解!
小蓝考场上挺急的,直接就草稿纸手推10种方案,比较耗时间,不太推荐。
稍微动一下脑筋其实挺容易的,找到规律:每次折叠后,都有一条边减少了一半。
我们列出关于边的所有情况,分别是:旧长,旧宽,新长,新宽。
通过折叠几次手里的草稿纸,可以发现规律,新长=旧宽,新宽=旧长/2。
不断迭代下去,就搞定啦~
🍞代码详解
#试题 C: 纸张尺寸
s=input() #A1
n=int(s[1]) #1
x,y=1189,841 #旧长,旧宽
for i in range(n): #0x,y=y,x//2 #841,1189//2
print(x) #841
print(y) #594
⭐试题 D: 数位排序
🚀传送锚点
💡思路点拨
依旧还是一道数论题,蓝桥杯从前年的暴力杯,到去年的动规杯,最后来到今年的数论杯。
不禁感慨~真是一年比一年卷呀~小蓝感觉自己就是个包心菜,虽然很卷,但还是菜(/▽\)
🍞代码详解
#试题 D: 数位排序
n=int(input())
m=int(input())
d=dict()
for i in range(1,n+1):d[i]=sum(list(map(int,str(i)))) #建立字典里的键值对
l=list(d.items()) #将字典的键值对转换成列表方便排序
l.sort(key=lambda x:x[1]) #按第二个参数排序
print(l[m-1][0])'''
input:
13
5
print:
3d字典:
d={1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7,
8: 8, 9: 9, 10: 1, 11: 2, 12: 3, 13: 4}
l排序前:
l=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7),
(8, 8), (9, 9), (10, 1), (11, 2), (12, 3), (13, 4)]
l排序后:
l=[(1, 1), (10, 1), (2, 2), (11, 2), (3, 3), (12, 3), (4, 4),
(13, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)]
'''
⭐试题 E: 蜂巢
🚀传送锚点
💡思路点拨
非常感谢评论区两位大佬的题解!题解非常通俗易懂!
不仅有详细的注释,而且注释详细,小伙伴点击下面链接即可传送跳转!
小明大佬的题解👇
【蓝桥系列】——十三届蓝桥杯PythonB组第五题E题蜂巢(AC代码)_普通小明的博客-CSDN博客
小白大佬的题解👇
蓝桥杯2022年第十三届省赛真题蜂巢 python_学习中小白的博客-CSDN博客
🍞代码详解
小明的代码
def cc(f,len): # 坐标映射|| f为方向,len为行走的距离,返回值为dx,dy的增量(微分)if f==0:return (-len,0)elif f==1:return (-len/2,len*e/2)elif f==2:return (len/2,len*e/2)elif f==3:return (len,0)elif f==4:return (len/2,-len*e/2)elif f==5:return (-len/2,-len*e/2)
e=3**0.5 # 存根号3
d1,p1,q1,d2,p2,q2=map(int,input().split())
a1=[[d1,p1],[(d1+2)%6,q1]] # a路径的两次方向变化
b1=[[d2,p2],[(d2+2)%6,q2]] # b路径的两次方向变化
a=[0,0] # a点映射后的坐标(x,y)
b=[0,0] # b点映射后的坐标(x,y)
for i in range(2): # 进行a路径的坐标映射dx,dy=cc(a1[i][0],a1[i][1]*2) # 因为一格长度是2所以*2a[0]+=dxa[1]+=dy
for i in range(2): # 进行b路径的坐标映射dx,dy=cc(b1[i][0],b1[i][1]*2)b[0]+=dxb[1]+=dy
x,y=abs(b[0]-a[0]),abs(b[1]-a[1]) # 计算a点b点的水平垂直距离
# 蓝线可根据斜率区分,蓝线上的情况两种都可以所以这里分给蓝线右下方
if abs(y/x)<=e: # 蓝线右下方len=round(((x-y*e/3)+(y*e*2/3))/2) # 因为有根号有精度问题需要进行四舍五入print("%d"%len)
else: # 蓝线左上方len=round(y*e/3)print("%d"%len)
小白的代码
def zuobiao(x, y, d, step): # 查找BC两点坐标if d == 0:x -= 2*stepreturn x,yelif d == 1:x -= stepy += stepreturn x,yelif d == 2:x += stepy += stepreturn x,yelif d == 3:x += 2*stepreturn x,yelif d == 4:x += stepy -= stepreturn x,yelse:x -= stepy -= stepreturn x,ydef f(xb,yb,xc,yc):if abs(xb-xc) <= abs(yb-yc):return abs(yb-yc)else:if xb < xc: # B点在左边res = abs(yb-yc)+(xc-abs(yb-yc)-xb)//2return reselse: # C点在左边res = abs(yc-yb)+(xb-abs(yc-yb)-xc)//2return resif __name__=="__main__":d1,p1,q1,d2,p2,q2 = map(int,input().split())xb1, yb1 = zuobiao(0,0,d1,p1)xb, yb = zuobiao(xb1, yb1, (d1+2)%6, q1)xc1, yc1 = zuobiao(0,0,d2,p2)xc, yc = zuobiao(xc1, yc1, (d2+2)%6, q2)print(f(xb,yb,xc,yc))
⭐试题 F: 消除游戏
🚀传送锚点
💡思路点拨
下面依然是一道暴力枚举题,暴力枚举YYDS!
一看题目就被吓到了,删除边缘字符,这么复杂,怎么搞呀?
结果一看题解,没想到这么简单!
先定义个函数,专门用来处理题目中的字符串操作。
就照着题目给的公式写,没想到答案都藏在题目里 (+_+)?
再写个主函数,循环判断字符串的边缘字符是否删除完毕?就搞定啦~
🍞代码详解
#试题 F: 消除游戏
def f(s): #删除一个字符串s的所有边缘字符d=set() #集合结构确保边缘字符不重复for i in range(1,len(s)-1):if s[i]==s[i-1] and s[i]!=s[i+1]:d.add(i)d.add(i+1)if s[i]==s[i+1] and s[i-1]!=s[i]:d.add(i-1)d.add(i)s=list(s) #转化成列表方便操作for i in d: #删除集合里的边缘字符s[i]='' return ''.join(s) #转换回字符串s=input()
for i in range(2**64):temp=s #temp记录一开始的字符串s=f(s) #进行一次函数运算if s==temp: #运算后和运算前字符串相同,说明已删除到最简形式print(s) #直接输出结果break #结束循环if len(s)==0:print('EMPTY')break
'''
input:
sdfhhhhcvhhxcxnnnnshh
print:
s
'''
⭐试题 G: 全排列的价值
🚀传送锚点
💡思路点拨
啊这好难,不太会呀,直接参考大佬题解👇
试题G:全排列的价值(第十三届蓝桥杯省赛Python B组)_零号记事本的博客-CSDN博客
🍞代码详解
#试题 G: 全排列的价值
import itertools
a=int(input())
b=[int(s) for s in range(1,a+1)]
ans=0
for i in itertools.permutations(b):for k in range(1,a):for j in range(0,k):if i[j]<i[k]:ans+=1
print(ans)
#试题 G: 全排列的价值
import math
n=int(input())
print(sum(range(n))*math.factorial(n)//2%998244353)
⭐试题 H: 技能升级
🚀传送锚点
💡思路点拨
一直都是暴力解法q(≧▽≦q)
🍞代码详解
#试题 H: 技能升级
n,m=map(int,input().split())
a=[list(map(int,input().split())) for i in range(n)]
ans=0
while m>0:a=sorted(a,key=lambda x:x[0],reverse=True)#每次都从大到小排序ans+=a[0][0]a[0][0]-=a[0][1]m-=1
print(ans)'''
input:
3 6
10 5
9 2
8 1
print:
47
demo:
[[10, 5], [9, 2], [8, 1]]
[[9, 2], [8, 1], [5, 5]]
[[8, 1], [7, 2], [5, 5]]
[[7, 1], [7, 2], [5, 5]]
[[7, 2], [6, 1], [5, 5]]
[[6, 1], [5, 2], [5, 5]]
'''
⭐试题 I: 最长不下降子序列
🚀传送锚点
💡思路点拨
啊这好难,还是做不出来,继续参考大佬题解👇第十三届蓝桥杯省赛Python 组_AYO_YO的博客-CSDN博客
🍞代码详解
#试题 I: 最长不下降子序列
import copy
# 判断非递减
def isfdj(lst):return lst == sorted(lst)
n, k = map(int, input().split())
ls = list(map(int, input().split()))
l = []
for i in range(1, n - k):tmp = copy.deepcopy(ls)t = ls[i - 1]for j in range(i, i + k):tmp[j] = tll = 0 # 当前子串长度low = 0high = 1while high < n:if isfdj(tmp[low:high]):ll += 1else:l.append(ll)ll = 0low = highhigh += 1l.append(ll)
print(max(l))'''
input:
5 1
1 4 2 8 5
print:
4
'''
⭐试题 J: 最优清零方案
🚀传送锚点
💡思路点拨
第十三届蓝桥杯省赛Python 组_AYO_YO的博客-CSDN博客
🍞代码详解
#试题 J: 最优清零方案
n,k=map(int, input().split())
a=list(map(int, input().split()))
i,c=0,0
while True:r=i+kif r<=n:if 0 not in a[i:r]:a[i:r]=map(lambda x: x-1, a[i:r])c+=1else:i=a[i:r].index(0)+i+1else:break
c+=sum(a)
print(c)'''
input:
4 2
1 2 3 4
print:
6
'''
💌考后寄语
if 进国赛:
小伙伴可以继续刷题战斗!
小蓝已经帮大家整理好了:python组之前的所有国赛真题👇
2021年蓝桥python组国赛
2020年蓝桥python组国赛
else:
没进国赛的小伙伴,小蓝陪你们明年再战!
下面是小蓝明年考前的复习资料👇
备战蓝桥21篇专题系列
finally:
最后,成败当然重要,体验可能更重要。
[这是你命运里必须经历的一部分,接受它就好了」。
不是消极地听天由命,而是积极地接受现实、为所当为。
一个人身上的坚持,对生活热情且执着的秉性,
善于自我教育和不断成长的意识,才是最重要的。
决定你人生和命运的,不是你比赛拿奖与否,不是你目前有无找到好工作,
不是你有无遭遇人生低谷,不是你有没有选对男朋友,或者有无寻得好的婚姻。
是你这个人,你的性格,你的勇气和行动。 ———— 高冷冷
备战蓝桥杯,我们明年见!
重新回归
嗷嗷嗷嗷嗷~(像大猩猩一样双手捶胸)
啊啊啊!时隔一年,小蓝终于回归了,家人们!!让宝子们久等了!😄
这次小蓝给大家带来一个大福利,一定要看到最后(结尾有福利🎁)
一劳永逸,解决你所有的刷题困惑!!(注意是所有⚠️)
把刷题和ChatGPT结合起来,让你的刷题效率直接嘎嘎起飞✈️
体验效果
下面咱们把考试第一题复制进去,看看效果!⬇️
一秒钟生成答案!这速度太太太爽了!
然后再试一下最难的第10题⬇️
效果更加惊艳!GPT竟然连动态规划DP都会!
代码里还有详细注释,还附带解析,简直是咱们新生小白的福音!!
不吹不黑,要是GPT替我去考蓝桥杯,拿个国奖都是小菜一碟好不好!
哪里使用
有同学就问了,这个刷题神器-GPT要哪里下载,我也想用!
小蓝当然考虑到了,先别着急,GPT现在在国外需要梯子🪜➕国外账号才能用,
小蓝搞了一下午才搞定,真的巨麻烦!
不过还好小蓝发现了一个神奇的网站,不用联网就能免费用上GPT!
加小蓝的微信,备注“蓝桥杯”,小蓝拉你进入读者群!免费领取GPT网站!
🎁🎁🎁还附赠小蓝的独门刷题知识体系网站!🎁🎁🎁
题库网页展示「题型目录」⬇️
部分题库展示「枚举模拟篇」⬇️
部分题库展示「动态规划篇」⬇️
更多福利🎁
加小蓝的威信🟰GPT解题网页➕蓝桥杯读者福利群➕蓝桥杯往年真题题库