9.27 滴滴笔试

1. 找到区间l到r范围内的数i,在给定进制范围a到b下,呈现波浪数的次数k的数字,在一个进制下呈现波浪数记一次。

维护fi表示i呈现波浪数的次数。
遍历进制x,遍历交替出现的数字c d,根据c d构造波浪数t,ft加一

最后遍历l到r的所有的f,输出f等于指定次数的数

2. 贪心加模拟

给定一棵树,每个时刻,可以指定一个节点传递信息,同时已有信息的节点可以经过父节点传递消息到同一个父节点下的另一个节点,每个时刻的父节点只能使用一次

思路,统计节点的子节点个数,按子节点个数降序先给这个节点一个子节点传递消息。得到一个时间t1.

维护t2

将子节点还未全部获得消息的节点放入优先队列,按未获得消息的节点个数为优先级

每个时刻,t2加一,取出队列元素,将未获得消息的节点数减一后入队,直到取出的节点未获得消息个数小于t2

最后结果就是t1加t2#笔试# #滴滴笔试#
全部评论

相关推荐

09-27 17:46
龙岩学院 护士
鼠鼠做的 91 100不知道为什么第一题有一个用例过不去,没啥好思路就暴力做了,佬们可以帮忙看看代码吗?第一题:波浪数,给定进制【a,b】和十进制【l,r】,以及波浪数【k】,求波浪数满足条件的十进制数。波浪数定义为两个不同的数交替构成的,如 1010, 1A1, ABA;请在【a,b】进制中找到这样的十进制数,且该十进制数必须在区间【l,r】中#####################################################################a,b,l,r,wave=map(int,input().split())mapList={chr(ord("A")+i):10+i for i in range(26)}for i in range(10):mapList[str(i)]=inumList={10+i:chr(ord("A")+i) for i in range(26)}for i in range(10):numList[i]=str(i)def getTenTrans(v,k):# 对应的元素ans=0v=str(v)[::-1]for i in range(len(v)):ans+=k**i*mapList[v[i]]return ansansList={}# 先找到需要处理的进制区间内所有对应的元素for k in range(a,b+1):# 上下限for i in range(1,k):for j in range(k):if i == j: continueq=numList[i]p=numList[j]temp=f"{q}"idx=2while getTenTrans(temp,k)<l:temp+=p if idx%2==0 else qidx+=1v=getTenTrans(temp,k)while v<=r:if v not in ansList:ansList[v] = 1else:ansList[v] += 1temp+=p if idx%2==0 else qidx+=1v=getTenTrans(temp,k)res=[]for k,v in ansList.items():if v==wave:res.append(k)res.sort()for i in res:print(i)####################################################################
投递滴滴等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务