当前位置: 首页 > 后端技术 > Python

2020李扣杯!编码你的未来春季全国编程大赛-python代码

时间:2023-03-25 23:51:47 Python

第一题取硬币LCP06.取硬币类解:defminCount(self,coins)->int:cnt=0forxincoins:cnt+=x>>1cnt+=x&1returncnt第二题转informationLCP07.Transferinformationclass解决方案:defnumWays(self,n:int,relation:List[List[int]],k:int)->int:x=[0]m={}forrinrelation:如果r[0]不在m中:m[r[0]]=[r[1]]否则:m[r[0]].append(r[1])foriinrange(k):xx=[]forcinx:ifcinm:xx.extend(m[c])#print(xx)x=xxcnt=0forxxxinx:ifxxx==n-1:cnt+=1returncnt第三题LCP08.PlottriggertimeLCP08.Plottriggertimeimportbisectclass解决方法:defgetTriggerTime(self,increase:List[List[int]],requirements:List[List[int]])->List[int]:c=[0]r=[0]h=[0]对于cc、rr、hh增加:c.append(c[-1]+cc)r.append(r[-1]+rr)h.append(h[-1]+hh)#print(c)#print(r)#print(h)a=[]forcc,rr,hh在要求中:ct=bisect.bisect_left(c,cc)rt=bisect.bisect_left(r,rr)ht=bisect.bisect_left(h,hh)xx=max([ct,rt,ht])ifxx==len(c):xx=-1a.append(xx)returna第四题最小跳跃次数LCP09.最小跳跃次数classSolution:defminJump(self,jump:List[int])->int:l=len(jump)outi=[]to={}fr={}ddd=[-1]*lforiinrange(l):d=i+jump[i]ifd>=l:outi.append(i)else:to[i]=difdinfr:fr[d].append(i)else:fr[d]=[i]mi=min(outi)导入队列q=queue.PriorityQueue()foroiinouti:ddd[oi]=0q.put((0,oi))#print(q.queue)#print(fr)cm=lwhileTrue:i,n=q.get()#print(i,n)ifn==0:breakforjinrange(n+1,cm):ifddd[j]==-1orddd[j]>i+1:#print('%d->%d'%(n,j))q.put((i+1,j))ddd[j]=i+1cm=min(cm,n)ifninfr:forfinfr[n]:#print(f,'f')ifddd[f]==-1或ddd[f]>i+1:ddd[f]=i+1#print('%d->%d'%(n,f))q.put((i+1、f))returni+1问题5二叉树任务调度LCP10.二叉树任务调度我自己没有做过,参考下littledva和zqy1018的两个方案都是dfs,只是思路不一样。第一种是将每棵树的时间分为单核时间(即不能并行化的时间)和双核时间。答案是两者之和;二是计算每棵子树的最短时间和所有任务的总时间。欢迎来到我的博客:https://codeplot.top/我的博客分类:https://codeplot.top/categories/%E5%88%B7%E9%A2%98/