美团8.13 463/500 后端
属实不配AK
第一题
""" AC 送餐: 送餐小哥有个魔法可以将餐立即送到客户面前 问: 最少需要使用多少次魔法可以在截止时间内将餐送到客户面前 输入参数 n , t : 送餐数量, 每次送餐需要的时间 arr : 每次送餐的截止时间 输入样例1 6 5: 数量 5 6 7 8 9 10 输出样例2 4 输入样例2 6 5 100 101 102 103 104 105 输出样例2 0 """ n, t = list(map(int, input().split())) arr = list(map(int, input().split())) arr.sort() end_time = t ans = n for i in arr: if end_time <= i: end_time = end_time + t ans -= 1 print(ans)第二题
""" AC
有一个扫地机器人
W A S D 命令控制其移动方向 每次移动一步
房间为 n * m 的矩形 n行 m列
机器人默认在最左上角, 并且所在格子已清洗
输入参数
n : 命令数
WASDS : 输入的命令
输出参数1:
"Yes" : 表结果
s : 清洗整个房间所需要的最小步数
输出参数2:
"No" : 表结果
s : 房间内剩余未走到的区块数量
"""
def solution():
m, n, op_num = list(map(int, input().split()))
op = list(input())
arr = [[False for _ in range(m)] for __ in range(n)]
arr[0][0] = True
sum_ = n * m
cur = [0, 0]
temp = 1
for i in range(len(op)):
if op[i] == "W":
if cur[0] > 0:
cur[0] -= 1
if not arr[cur[0]][cur[1]]:
temp += 1
arr[cur[0]][cur[1]] = True
elif op[i] == "S":
if cur[0] < n:
cur[0] += 1
if not arr[cur[0]][cur[1]]:
temp += 1
arr[cur[0]][cur[1]] = True
elif op[i] == "A":
if cur[1] > 0:
cur[1] -= 1
if not arr[cur[0]][cur[1]]:
temp += 1
arr[cur[0]][cur[1]] = True
else:
if cur[1] < m:
cur[1] += 1
if not arr[cur[0]][cur[1]]:
temp += 1
arr[cur[0]][cur[1]] = True
if temp == sum_:
print("Yes")
print(i + 1)
return
print("No")
print(sum_ - temp)
solution()
第三题""" AC
游戏规则
有n 张牌 序号为 1-n
A 拿一个牌堆最上面的牌 放到最后面
B 拿一个牌堆最上面的牌 放到最后面'
两人同时公开当前牌堆上最上面的那个牌
输入参数
n
1 2 3 4 : 依次掀开的牌顺序
输出参数
4 2 1 3 : 原始牌顺序(从牌顶到牌底)
"""
n = int(input())
arr = list(map(int, input().split()))
ans = ['' for _ in range(n)]
n = n
cur = 2
ans[cur] = f'{arr.pop(0)}'
for i in arr:
step = 3
while step:
cur = (cur + 1) % n
if not ans[cur]:
step -= 1
ans[cur] = f'{i}'
print(" ".join(ans))
第四题 (只想到了暴力解 ┭┮﹏┭┮))""" 63/100 一个数列, a[0], a[1], ..., a[n] i < j < k 求得该数列有多少个子数列满足 a[i] - a[j] == 2 * a[j] - a[k] 输入参数: n : 数列长度 arr : 数列 输入例子 4 4 2 2 2 """ n = int(input()) a = list(map(int, input().split())) def solution_1(n, arr): ans = 0 for i in range(n): for j in range(i + 1, n): for k in range(j + 1, n): ans += 1 if arr[i] - arr[j] == 2 * arr[j] - arr[k] else 0 print(ans) solution_1(n, a)第五题
""" AC 一个二叉树 用数组表示 做儿子为 2 * k 右儿子为 2 * k + 1 每个节点有个值 求得从根节点到最后得到的值总和最大为多少 """ n = int(input()) a = list(map(int, input().split())) a.insert(0, 0) ans = [0 for _ in range(n + 1)] ans[1] = a[1] for i in range(2, n + 1): ans[i] = a[i] + ans[i // 2] print(max(ans))
滴滴公司福利 1784人发布