本系列主要整理博主2023秋招的笔试情况。本节介绍20220813 16点美团笔试。
题目:
炸鸡店拥有一名会传送外卖的派送员。改外卖派送单子时,可以消耗时间t来正常派送单子(一次只能派送一个单子,不能多个同时派送),也可不耗费时间地隔空投送;
现在炸鸡店在时刻0接收到了若干炸鸡订单,每个订单都有他的截止送达时间,外卖派送员需要保证送达时间小于截止时间。
现在询问外卖员最少需要使用几次魔法来保证没有外卖超时。
输入输出:
第一行两个正整数n,t以空格分开,表示当前接到了n个订单,外卖员在不使用魔法的情况下正常派送所需要消耗间t。
第二行n个正整数,每个正整数表示一个订单的截止送达时间。
输入输出例子:
如输入:
6 5
5 6 7 8 9 10
应输出:
4
解题思路:对时间序列进行排序,记录正常配送消耗的时间,对于需要时间-消耗了的时间小于t时,魔法外卖+1,如果需要时间-消耗了的时间大于等于t时,证明可以送达,则把耗时+t。
n,t = list(map(int,input().split()))
timeList = list(map(int,input().split()))
timeList = sorted(timeList)
mofa = 0; #使用魔法外卖的次数
zhengchang = 0; #正常配送消耗的总时间
for i in range(n):
if timeList[i] - zhengchang >= t:
zhengchang += t
else:
mofa += 1
print(mofa)
题目:
A和B在玩一个游戏。有n张卡牌,点数分别为1到n。进行洗牌后,n张牌从上到下叠放形成一个牌堆。每次A先将当前牌堆顶的一张牌放到牌堆底,然后B再将当前堆顶的一张牌放到牌堆底。
(特别地,当牌堆中只有一张牌时,相当于不进行任何操作)接着,他们会翻开当前牌堆顶的牌,并记下它的点数。当所有牌都被翻开后,他们也记下了n个点数,现在他们想根据记下的
这个序列来还原一开始的牌。(从牌堆顶到牌堆底每一张牌的点数)
输入输出:
第一行是一个正整数n,表示有n张牌
接下来一行n个用空格隔开的正整数,第i个数a_i表示第i张被翻开的牌的点数。
输入输出例子:
如输入:
4
1 2 3 4
应输出:
4 2 1 3
解题思路:首先设计一个序号双向列表,里面只存放0-n的位置信息。然后根据题目要求移动双向列表,并按照翻开顺序保存翻开的位置与值。最后按照保存的字典给新列表赋值,就会得到最初的列表顺序。
from collections import *
n = int(input())
res = [0 for i in range(n)]
sortList = list(map(int,input().split()))
origin = deque() #双端队列
mp = dict() #字典
for i in range(n):
origin.append(i) #标记初始位置
for i in range(n):
origin.append(origin.popleft())
origin.append(origin.popleft())
value = origin.popleft()
mp.setdefault(value,i)
for k,v in mp.items():
res[k] = sortList[v]
for i in range(n):
print(res[i],end=" ")
print("")