赞
踩
任其风华无限,难敌时间易老。
各位coder,一周后就要上考场验一验自己的代码水平了,从报名以来是否做到了每天两小时刷题?查找众多攻略是否真的把一个按顺序进行训练?
不知别人,小编没有,在今年的开放背景下,春季学期的前三周变成了考试周!结束后又想放松一下,加上学校的一些比赛和活动,真实刷题的时间寥寥,一开始肯定是简单的,因为肚子是空的,吃东西就好,但后面肚子渐渐变满,上顿的东西还没消化,下顿的又来了,过了一段时间消化不良的反应,终于重新回归!
最后一周让我们红尘作伴在此追逐一下最终的结果!
也不写7天规划了,每天找一套真题,干完就拉倒!
今天是第十三届蓝桥杯大赛软件赛省赛Python大学B组
总时间:4hours=240min
目标分数:50+!
s="WHERETHEREISAWILLTHEREISAWAY"
c=[]
for i in s:
c.append(i)
c.sort()
for i in c:
print(i,end="")
这题还是很简单的,如果怕写错,就数一数和答案对一下
time:8min以内
value:+5分
这一看是不是先得把非质数去掉呀,把质数留下运算
import os
import sys
dp = [(2, 1), (3, 2), (5, 4), (7, 4), (13, 10), (19, 18), (23, 15), (29, 16), (31, 27), (37, 22), (41, 1), (47, 5)]//质数列表
lcm=187//最小公倍数
ans=187
i=0
while i<len(dp):
if ans%dp[i][0]==dp[i][1]://满足条件
lcm*=dp[i][0]//乘到lcm上
i+=1//次数+1
else:
ans+=lcm//不满足就+lcm继续检验
print(ans)
time+=30min
value+=5分
这题如果上来没想法建议直接跳过,5分写个半小时还是有点亏的,写不出来就更加亏了
看到网上还有个方法使用了中国剩余定理,看了半天没太懂,这题有点狗血
l=1189
w=841
i=0
s=input()
n=int(s[-1])//把尺寸号截下来
for i in range(n)://长变宽,宽变长//2,次数就是尺寸号
l,w=w,l//2
print(l)
print(w)
这题简单10分血赚!
time+=8
value+=10
这道题主要是排序,通过sort()的参数key,决定排序方法。
key=lambda x:sum(int(i) for i in str(x))
另一个比较常用的参数reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)
n=int(input())
m=int(input())
s=list(range(1,n+1))
s.sort(key=lambda x:sum(int(i) for i in str(x)))//重点内容记得背诵
print(s[m-1])
time+=8min
value+=10分
这道题六个方向不好写,改成平面坐标方便思考,因为每个点到中间的距离相同,所以使用如下距离方式,都是2**0.5
原点就是(0,0),0方向:(-2,0),1方向:(-1,1),2方向:(1,1),3方向:(2,0),4方向:(1,-1),5方向:(-1,-1)
import os import sys def walk(d,q,x,y)://从(x,y)向d方向走q步 x+=x_dir[d]*q y+=y_dir[d]*q return x,y x_dir=[-2,-1,1,2,1,-1]//方向表 y_dir=[0,1,1,0,-1,-1] d1,p1,q1,d2,p2,q2=map(int,input().split()) x1,y1=walk(d1,p1,0,0) x1,y1=walk((d1+2)%6,q1,x1,y1) x2,y2=walk(d2,p2,0,0) x2,y2=walk((d2+2)%6,q2,x2,y2) dx,dy=abs(x1-x2),abs(y1-y2)//算差值用于判断行走距离 if dx>=dy://如果dx方向位移更大,我们只能先横着走,在竖着走,不能通过六边形优势快速到达,距离就是两者和的一半 print((dx+dy)//2) else://如果dy方向差值很大,我们发现斜着走就够了,因为每次在x方向有着60°的偏转,大家可以自己换图随便找几个例子试试 print(dy)
time+=20min
value+=15分
到此为止,如果以上5道题全部作对,那么拿个省二应该不成问题。
半期总结:这五道题中第二题难度最高,其他均可通过正常思考求解,预估时间两个小时以内,
先读两遍题,看清要求是不相等的两个数为边界字符,所以样例一,经过两个判定条件,四个字母都为边界字符,全部删除为EMPTY
样例2:sdfhhhhcvhhxcxnnnnshh(加粗为删除字符)
第一轮过后先把在相同元素周围的字符删掉结果为=sdhhcnnh,第二轮就只剩s了
s=list(str(input())) pre=s f=False for i in range(pow(2,64)): flag=[False]*len(s) for j in range(1,len(s)-1): if s[j]==s[j-1] and s[j]!=s[j+1]: flag[j]=True flag[j+1]=True if s[j]!=s[j-1] and s[j]==s[j+1]: flag[j-1]=True flag[j]=True for j in range(len(flag)): if flag[j]: s[j]='' s=list(''.join(s)) if len(s)==0: f=True break if pre==s: break pre=s if f: print('EMPTY') else: print(''.join(s))
time+=30min
value+=15分
这题还是值得做的,写好判定条件,多编写几组样例测试。
这题想不出来主打一个爆搜,但是你把内容写下来,你会发现,借用一个老哥的解释
a= int(input())
s= a*(a-1)/4
for i in range(1,a+1):
s*=i
s%=998244353
print(int(s))
中国人的脑袋还是好使得!
time+=15min
value+=15
import math n, m = list(map(int, input().split())) mp = {}//字典进行存储 for i in range(0, n): Ai, Bi = list(map(int, input().split())) mp[i + 1] = [Ai, Bi, 0] # print(mp) temp = sorted(mp.items(), key=lambda mp: mp[1][0], reverse=True)//通过当前value进行排序 # print(temp) res = 0 for i in range(0, m): index = temp[0][0] A = temp[0][1][0] B = temp[0][1][1] times = temp[0][1][2] # print(index,A,B,times) if times >= math.ceil(A / B)://如果当前此技能已经升到满级了,就置零 A = 0 B = 0 res += A A -= B times += 1 mp[index] = [A, B, times]//善后处理,重新排序 temp = sorted(mp.items(), key=lambda mp: mp[1][0], reverse=True) print(res)
debug视图
time+=30min
value+=20分
最后两道题我就不写了,看了好久都没看懂,但如果前八道题,能AC5道以上,那么省二肯定是保底,省一就看你其他题的部分分拿的怎么样了,不管怎么说,这套题整体看来质量还是过关的
有三道送分的,全写对拿个奖保底没问题,数论、DP、贪婪算法,使用列表、字典、排序、二分,考察全面,质量过关!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。