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
,中间空格。
🧠 思维小结¶
- 本题是典型的“方位模拟”类型题,常用于机器人、路径模拟等。
- 核心在于“用数字表示方向”和“用数组记录方向变化”。
- 字符串的遍历 + 简单状态机,是一个很基础但高频的模拟技巧。