饿了么笔试0908

T2

有一个机器人位于 (0,0) ,会根据一串只含 'L','R','U','D' 的指令移动,方向依次为左、右、上、下,对应的坐标变化为 (0,-1),(0,1),(-1,0),(1,0)【这个对应关系很坑】。对每组数据,机器人都会无限次重复指定直到碰到位于 (x,y) 的障碍物。请判断机器人是否会碰到障碍物,并相应地输出 YES 或 NO。

  • 输入描述

第一行为一个整数 t 代表数据的组数
之后的每组数据,有两行输入,第一行两个整数 x y 代表障碍物坐标,第二行是指令序列

数据范围:指令序列长度为 n <= 100000,-10^9 <= x,y <= 10^9。

输入

2
-11 -5
UUL
2 0
LRUD

输出

YES
NO

分析

  • 如果机器人在某次碰到障碍物,一定是经历了 m 遍指令 + k 次行动,0 <= k < (指令长度) - 1
  • 记机器人每完成一遍指令会位移 (dx, dy)
  • 对于执行一遍指令的过程,把经过的所有点以集合的形式存下来。我们只需要看每个点能否在零次或多次 (dx, dy) 的位移后到达 (x, y) 即可
  • 然而按这个思路写的代码只过了 13%,走过路过的大佬帮忙看看我哪里写得有问题orz

代码

dx = {"L": 0, "R": 0, "U": -1, "D": 1}
dy = {"L": -1, "R": 1, "U": 0, "D": 0}

t = int(input())
for i in range(t):
    points = {(0, 0)}
    x, y = [int(x) for x in input().split()]
    x0 = y0 = 0
    xt = yt = 0
    s = input()
    for si in s:
        xt += dx[si]
        yt += dy[si]
        points.add((xt, yt))
    # 此时的 xt, yt 就是每个周期的 x 轴位移和 y 轴位移
    if dx == 0 and dy == 0:
        # 执行一遍指令后回到原点,只要看 points 是否包含 (x, y)
        if (x, y) in points:
            print("YES")
        else:
            print("NO")
    else: # 每个周期至少 x 和 y 中的一个会变化
        for px, py in points:
            
            if dx != 0:
                # 每个周期的 x 会变化,用 x 的变化来计算每个点到达障碍物要几步
                n = (x - px) // xt
            else:
                # 每个周期的 y 会变化,用 y 的变化来计算每个点到达障碍物要几步
                n = (y - py) // yt
                
            if (n >= 0) and (px + xt * n == x) and (py + yt * n == y):
                print("YES")
            else:
                print("NO")

T3

给出一个长度为 n (n <= 100000) 的字符串,代表一个三进制的数。输出比它大且所有相邻位数的数字都不同的最小的三进制数。

输入

122

输出

201

分析

有点贪心的味道,我的方法过了 80%+
分了好几类讨论,最后的逻辑:

  • 如果 x 长度为 1,直接打表输出
  • 从左到右遍历,如果 x 本身有重复,处理第一处重复,后续用"01"循环填充,得到 f(x) 并输出
  • 如果 x 本身没有重复,就把 x 的最后两位变成加一的结果(比如 12 变为 20)
    • 此时如果 x 还是没有重复,直接输出
    • 如果 x 重复了,输出 f(x)
#饿了么笔试##笔试##秋招##校招##饿了么#
全部评论
这两题写麻了
2 回复 分享
发布于 2023-09-08 21:39 陕西
你最后不应该直接no的,而是所有遍历完no
点赞 回复 分享
发布于 2023-09-08 21:49 四川
第二题我也只过了13%,现在官网显示已经挂了
点赞 回复 分享
发布于 2023-09-09 16:01 浙江
想问问那些选择题应该怎么准备复习
点赞 回复 分享
发布于 2023-09-11 14:19 上海

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
循此苦旅:月初笔试全a,没面试!
点赞 评论 收藏
分享
1 3 评论
分享
牛客网
牛客企业服务