雷火笔试难过的记录

1. ac
def area(rect):
    return rect[0] * rect[1]

def func(rect):
    return min(rect[0]/rect[1], rect[1]/rect[0])

if __name__ == "__main__":
    N = int(input())
    rects = list(map(lambda x: int(x), input().split(' ')))
    width = rects[0::2]
    height = rects[1::2]
    rects = list(zip(width, height))

    *** = {}
    for r in rects:
        ar = area(r)
        if ar not in ***:
            ***[ar] = []
        ***[ar].append(r)
    
    for k, v in ***.items():
        _ = list()
        tmp = {}

        for x in ***[k]:
            if func(x) not in tmp:
                tmp[func(x)] = []
            tmp[func(x)].append(x)
        for tk, tv in tmp.items():
            tmp[tk] = sorted(tv, key=lambda x: x[0])
        tmp_keys = list(tmp.keys()) 
        tmp_keys.sort(reverse=True)
        for t in tmp_keys:
            for p in tmp[t]:
                _.append(p)
        ***[k] = _
    res = []
    ***_keys = list(***.keys())
    ***_keys.sort()
    for ak in ***_keys:
        res.extend(***[ak])

    __ = []
    for z in res:
        __.append(str(z[0]))
        __.append(str(z[1]))
    res_str =' '.join(__)    
    print(res_str)
2. 没加括号导致的不通过,伤心啊
if __name__ == "__main__":
    result = []
    while True:
        try:
            x, y = map(lambda x: int(x), input().split(' '))
        except:
            break
        else:
            max_axi = max(abs(x), abs(y))
            last_max = ((max_axi-1)*2 + 1)**2-1
            if x >= 0 and y > 0:
                last_max += (max_axi << 1) - x + y
            elif x < 0 and y >= 0:
                last_max += (max_axi << 2) + abs(x) - y
            elif x <= 0 and y < 0:
                last_max += max_axi*6 -y +x
            elif x > 0 and y < 0:
                if abs(x) <= abs(y):
                    last_max += max_axi * 7 + x
                else:
                    last_max += max_axi + y 
            result.append(last_max)
    for r in result:
        print(r)
4. 背包问题, 题目理解错误,以为输入是x0,x1,x2,y0,y1,y2,z0,z1,z2这样的顺序, 结果实际是x0,y0,z0,x1,y1,z1,x2,y2,z2,太难受了,两个小时咋调都不过,结果结束了发现了问题
if __name__ == "__main__":
    N, H = list(map(lambda x: int(x), input().split(" ")))
    _ = list(map(lambda x: int(x), input().split(" ")))
    Xi = _[0::3]
    Yi = _[1::3]
    Zi = _[2::3]

    # 血量不超过H的最大经验
    dp = [
        [
            0 for j in range(H+1)
        ] for i in range(N+1)
    ]

    res = 0
    for i in range(1, 1 + N):
        for j in range(H+1):
            a = j + Xi[i-1]
            b = j + Zi[i-1]
            if a <= H and b <= H:
                dp[i][j] = max(dp[i-1][a]+Yi[i-1], dp[i-1][b])
            elif a <= H:
                dp[i][j] = dp[i-1][a]+Yi[i-1]
            elif b <= H:
                dp[i][j] = dp[i-1][b]
            res = max(res, dp[i][j])
    print(res)            

#笔试题目##网易雷火#
全部评论
同只过了124,实在坐不住了提前交卷了
点赞 回复
分享
发布于 2019-03-18 03:15
第四题应该不是背包,直接BFS就可以了
点赞 回复
分享
发布于 2019-03-18 08:50
秋招专场
校招火热招聘中
官网直投
第二题我找不到规律,选择直接打表只能过20%case,哭了
点赞 回复
分享
发布于 2019-03-18 08:51
求问,雷火笔试如果投C++岗位,是否限制编程语言
点赞 回复
分享
发布于 2019-04-04 21:06

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务