跳转至

ABC244B Go Straight and Turn Right

✅ 题目简述

  • 起点是 (0, 0),初始朝向东(右)。
  • 读取一个长度为 $N$ 的字符串,每个字符是:
  • 'S':朝当前方向走一步。
  • 'R':顺时针转 90°。

目标是:求最终的坐标 $(x, y)$


🔁 解题思路

1. 方向表示

将方向按顺时针编号,从东开始:

方向 编号 坐标变化 (dx, dy)
0 (1, 0)
1 (0, -1)
西 2 (-1, 0)
3 (0, 1)

我们用一个变量 dir 表示当前方向,初始为 0(东)。

设置两个数组记录坐标变换:dx[4]dy[4]

int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, -1, 0, 1}

2. 遍历字符串

  • 遇到 'R'dir = (dir + 1) % 4
  • 遇到 'S':当前位置坐标 (x, y) 加上当前方向的 (dx[dir], dy[dir])

⏱️ 时间与空间复杂度

  • 时间复杂度:$O(N)$,每个字符遍历一次。
  • 空间复杂度:$O(1)$,只使用常数个变量记录位置与方向。

⚠️ 注意事项

  • 注意方向循环控制在 $[0, 3]$ 之间。
  • 最终输出两个整数:x y,中间空格。

🧠 思维小结

  • 本题是典型的“方位模拟”类型题,常用于机器人、路径模拟等。
  • 核心在于“用数字表示方向”和“用数组记录方向变化”。
  • 字符串的遍历 + 简单状态机,是一个很基础但高频的模拟技巧。