美团8.20笔试,python解法及思路

第一题,烤串

给定2个字符串,AB,依次输出A1B1A2B2...一直到末尾
签到题,直接一次遍历,放入新字符串
n = int(input().strip())
l1 = list(map(str,input().strip().split()))
l2 = list(map(str,input().strip().split()))
res = ''
for i in range(n):
    res = res+ str(l1[0][i])+str(l2[0][i])
print(res)

第二题

地图上放了3个定位装置,地图是一个n*n的棋盘,有3个定位装置(x1,y1),(x2,y2),(x3,y3),每个值均在[1,n]内,在(a,b)位置放了一个信标,定位装置会告诉到信标的曼哈顿距离,求信标位置,信标不唯一,输出字典序最小的。
input:
3
21
22
23
212
output:
12
这个题我只过了73%,是枚举了每个定位装置的符合距离的点位集合,三个集合求交集,提示是空间复杂度超了
n = int(input().strip())
ding1 = list(map(int, input().strip().split(' ')))
ding2 = list(map(int, input().strip().split(' ')))
ding3 = list(map(int, input().strip().split(' ')))
dis = list(map(int, input().strip().split(' ')))

def mhd(n, r, x,y):
    res = []
    for i in range(r+1):
        x1 = x +i
        x2 = x-i
        y1 = y+r-i
        y2 = y -(r-i)
        if x1<=n and x1>0 and y1<=n and y1>0:
            res.append([x1,y1])
        if x1<=n and x1>0 and y2<=n and y2>0:
            res.append([x1,y2])
        if x2<=n and x2>0 and y1<=n and y1>0:
            res.append([x2,y1])
        if x2<=n and x2>0 and y2<=n and y2>0:
            res.append([x2,y2])
    return res

ans1 = mhd(n,dis[0],ding1[0],ding1[1])
ans2 = mhd(n,dis[1],ding2[0],ding2[1])
ans3 = mhd(n,dis[2],ding3[0],ding3[1])

ans12 = []
ans = []
for i in ans1:
    if i in ans2:
        ans12.append(i)
for j in ans3:
    if j in ans12:
        ans.append(j)
ans.sort()
print(str(ans[0][0])+' '+str(ans[0][1]))



第三题

期中考试,有n道题,对于第i道题,有pi的几率做对,获得ai的分值,还有(1-pi)的概率做错,得0分。
总分是每道题获得的分数之和。
因为时间有限,最多复习m道题,复习后的试题正确率为100%。
如果以最佳方式复习,能获得期望最大总分是多少?

做法是求每道题做错丢的分数,丢的越多,复习这道题,得到的分数就越多,注意保留两位小数,不保留只能过27%,快结束才检查出来这个问题
nm = list(map(int,input().strip().split(' ')))
p = list(map(int,input().strip().split(' ')))
score = list(map(int,input().strip().split(' ')))
true_score = []
for i in range(len(p)):
    true_score.append([(1-p[i]/100)*score[i],score[i]])
true_score.sort(reverse=1)
res = 0
for j in range(len(p)):
    if j<nm[1]:
        res = res + true_score[j][1]
    else:
        res = res + true_score[j][1]-true_score[j][0]
print(round(float(res),2)


第四题

收到妈妈送的两个一模一样的数列作为礼物,但是不小心没拿稳将数列摔坏了,现在手上的两个数列分别为A和B,长度分别为m。现在能做两种操作:
操作一:将一个选定数列中的某一个数a改成数b,这会花费|b-a|的时间
操作二:选择一个数列中某个数a,将它从数列中丢掉,花费a的时间。
最少能以多时间将这两个数列变得再次相同?

编辑距离,看大佬说python可能超时


第五题

火箭有一些地方坏了,为了修补一个地方,需要使用材料压着,有很多种这样的材料。
火箭上有n个地方坏了,每个地方至少需要bi单位重量的材料压住
有m种材料,每种材料重量为ai
同时要求:一个地方只能使用一个材料,材料需要尽量小。

分别对n和m进行排序,然后遍历n和m,m只需要从上一次的开始遍历即可,从头遍历的话会超时
nm = list(map(int, input().strip().split(' ')))
ni = list(map(int, input().strip().split(' ')))
mi = list(map(int, input().strip().split(' ')))
res = 0
ni.sort()
mi.sort()
temp = 0
for i in range(len(ni)):
    flag = 0
    for j in range(temp, len(mi)):
        if mi[j] >= ni[i]:
            res = res + mi[j]
            temp = j
            flag = 1
            break
        else:
            continue
        if flag == 1:
            continue
        else:
            break
if flag == 1:
    print(res)
else:
    print(-1)






#美团笔试##美团笔试题##笔试题目#
全部评论
刀哥太强了!
1 回复 分享
发布于 2022-08-22 10:07 北京
第二题用的C++错了没提示😓 现在看来感觉可能也是空间超了
点赞 回复 分享
发布于 2022-08-23 16:35 安徽
美团什么岗呀 数分 还是算法
点赞 回复 分享
发布于 2022-10-07 17:33 重庆

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
评论
4
19
分享
牛客网
牛客企业服务