美团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))


#美团笔试##秋招进度交流#
全部评论
你这个题目描述是原题一样的描述吗?我没参加笔试今天,但是我看不懂你的题目描述。。
点赞 回复 分享
发布于 2022-08-13 21:34

相关推荐

03-12 13:51
南昌大学 Java
点赞 评论 收藏
分享
ResourceUtilization:我嘞个董事长
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客企业服务