[R30A]机器人移动2

  • 难度 入门
  • 时限 1s
  • 空限 512m
  • 模拟

数据规模:1s1001 \le |s| \le 100ss 只包含 UDLR

思路

按题意从 (0,0)(0, 0) 出发,依次处理指令字符串中的每个字符,用两个变量维护当前坐标:遇到 U/D 就对 yy 加减 1,遇到 L/R 就对 xx 加减 1。处理完整串指令后输出最终的 (x,y)(x, y) 即可。

由于仓颉中 for (ch in s) 遍历字符串得到的是 UTF-8 字节(UInt8),直接用 ASCII 码值(85u8 对应 U 等)来比较分支即可。

复杂度

时间 O(s)O(|s|),空间 O(1)O(1)

仓颉实现

import std.env.*

main(): Int64 {
    let reader = getStdIn()
    let s = reader.readln().getOrThrow()
    var x: Int64 = 0
    var y: Int64 = 0
    for (b in s) {
        if (b == 85u8) {       // 'U'
            y += 1
        } else if (b == 68u8) { // 'D'
            y -= 1
        } else if (b == 76u8) { // 'L'
            x -= 1
        } else if (b == 82u8) { // 'R'
            x += 1
        }
    }
    println("${x} ${y}")
    return 0
}