6月1日,今天参加了第十五届蓝桥杯国赛,本人打的是pb组,做完回来就把代码复盘了一下。但由于成绩未出,答案仅供参考。
第一题:31
第二题: 没写出来
第三题:
dic={} n,m=map(int,input().split()) ls=list(map(int,input().split())) for i in range(1,n+1): dic[i]=[] for j in ls: dic[j].append(0) for k in range(1,n+1): dic[k].append(abs(k-j)) li=[] for l in dic.values(): li.append(max(l)) for q in li: print(q,end=' ')
第四题:
n,m=map(int,input().split()) ls=list(map(int,input().split())) while m: a_max,mp=0,-1 for i,j in enumerate(ls): if j>a_max: a_max=j mp=i if a_max%2==0: ls[mp]=a_max//2 m-=1 else: ls[mp]=a_max//2+1 m-=1 print(max(ls))
第五题:
思路:马走日,象走田。 bfs里面套bfs 以象可以 走的位置为end,遍历马可走的位置,步数相加取最小值。
n,x1,y1,x2,y2=map(int,input().split()) def BFSM(n,x1,y1,x2,y2): dirs={lambda x,y:(x+1,y+2), lambda x,y:(x+2,y+1), lambda x,y:(x+2,y-1), lambda x,y:(x+1,y-2), lambda x,y:(x-1,y-2), lambda x,y:(x-2,y-1), lambda x,y:(x-2,y+1), lambda x,y:(x-1,y+2) } dirs2={lambda x,y:(x-2,y+2), lambda x,y:(x+2,y+2), lambda x,y:(x+2,y-2), lambda x,y:(x-2,y-2),} seen=set() st=(x1,y1) ed=(x2,y2) seen.add(st) q=[(st,0)] p=[(ed,0)] seen_1={} seen_1[ed]=0 ls=[] while p: now_1,step_1=p.pop(0) for dir in dirs2: new_1=dir(now_1[0],now_1[1]) if 0<=new_1[0]<=n+1 and 0<=new_1[1]<=n+1 and new_1 not in seen_1.keys(): seen_1[new_1]=step_1+1 p.append([new_1,step_1+1]) while q: now_node,step=q.pop(0) if now_node in seen_1.keys(): kk=step+seen_1[now_node] ls.append(kk) for dir in dirs: new_node=dir(now_node[0],now_node[1]) if 0<=new_node[0]<=n+1 and 0<=new_node[1]<=n+1 and new_node not in seen: seen.add(new_node) q.append([new_node,step+1]) if ls: return min(ls) else: return -1 print(BFSM(n,x1,y1,x2,y2))
第六题:
思路:主要是考栈的使用,用字典取存储每个左括号相对应的字母个数,定义符号栈和字母栈,但是其中符号栈可以出栈,但是字母栈只索引,不出栈。
s=str(input()) s0="abcdefghijklmnopqrstuvwxyz" q=int(input()) for i in range(q): s1,b1=map(str,input().split()) b=int(b1) v=s.count(s1) dic={} if v<b:print(0) else: re=0 stick_1=[] stick_2=[] for j in s: if j=="(": stick_1.append([j,0]) elif j in s0: stick_2.append(j) for w in range(len(stick_1)): stick_1[w][-1]+=1 else: k_1,st=stick_1.pop() if st==0: continue ve=stick_2[-1:-st-1:-1] if ve.count(s1)>=b: re+=1 print(re)
第七题:
思路:这道题的数据量很大,但数据很有特点,所以用了以下的定义一个目标列表来遍历这个列表,可能不能全部样例都过,但是我感觉这样会很省时间,并且可以过一多半样例。
n=int(input()) mod=998244353 b=str(n)[-1] if b==0: print(-1) else: ls=[1,11,111,1111,11111,111111,1111111,11111111,111111111,1111111111,11111111111,111111111111,1111111111111,11111111111111,111111111111111, 2,22,222,2222,22222,222222,2222222,22222222,222222222,2222222222,22222222222,222222222222,2222222222222,22222222222222,222222222222222, 3,33,333,3333,33333,333333,3333333,33333333,333333333,3333333333,33333333333,333333333333,3333333333333,33333333333333,333333333333333, 4,44,444,4444,44444,444444,4444444,44444444,444444444,4444444444,44444444444,444444444444,4444444444444,44444444444444,444444444444444, 5,55,555,5555,55555,555555,5555555,55555555,555555555,5555555555,55555555555,555555555555,5555555555555,55555555555555,555555555555555, 6,66,666,6666,66666,666666,6666666,66666666,666666666,6666666666,66666666666,666666666666,6666666666666,66666666666666,666666666666666, 7,77,777,7777,77777,777777,7777777,77777777,777777777,7777777777,77777777777,777777777777,7777777777777,77777777777777,777777777777777, 8,88,888,8888,88888,888888,8888888,88888888,888888888,8888888888,88888888888,888888888888,8888888888888,88888888888888,888888888888888, 9,99,999,9999,99999,999999,9999999,99999999,999999999,9999999999,99999999999,999999999999,9999999999999,99999999999999,999999999999999] for j in ls: if j%n==0: print(j%mod) break else: print(-1)
第八,九,十题,无能为力了。 坐等明天出成绩吧!