题目
题目描述
友也和绚音是好友。
一天夜里,绚音找到友也,希望友也能够前往一个地方帮助绚音寻找某个东西,友也爽快地答应了。
为此,绚音在友也的起始位置建立了一个二维坐标系,称为绝对坐标系,并定义友也的正面方向为 x x x 轴正方向。
现对四个方向分别标号, x x x, y y y 的正方向分别为 0 0 0, 1 1 1,负方向分别为 2 2 2, 3 3 3,称它们为绝对方向。友也只沿着与坐标轴平行的方向行走。
请你根据绚音给出的对于友也在相对方向上移动的描述,确定目的地的绝对坐标,以及到达目的地时友也面向的绝对方向标号。
对在相对方向上的移动的描述及意义如下:
-
F x
向前走 x x x 米。 -
B x
先向后转,再走 x x x 米。 -
L x
先向左转,再走 x x x 米。 -
R x
先向右转,再走 x x x 米。
输入输出格式
【输入格式】
第一行输入一个正整数 T T T ,表示有 T T T 组测试数据。
每组测试数据第一行输入一个正整数 n n n,表示这组测试数据需要移动 n n n 次,接下来 n n n 行每行输入一次相对移动,格式如上所述。
【输出格式】
对于每组数据输出一行,每行输出三个整数 x x x y y y p p p,中间用空格隔开, x x x, y y y 是目的地的绝对坐标, p p p 是到达目的地时友也面向的绝对方向编号 ( 0 ≤ p ≤ 3 ) (0 \le p \le 3) (0≤p≤3),共输出 T T T 组。
数据范围
1 ⩽ T ⩽ 500 1\leqslant T \leqslant 500 1⩽T⩽500
1 ⩽ n ⩽ 5000 1\leqslant n \leqslant 5000 1⩽n⩽5000
0 ⩽ x ⩽ 5 × 1 0 5 0\leqslant x \leqslant 5×10^5 0⩽x⩽5×105
测试样例
input1:
1
2
F 11
L 10
output1 :
11 10 1
样例说明
测试样例共 1 1 1 组测试数据。
这组测试数据共有 2 2 2 次移动,第一次移动友也向前移动 11 11 11 米,到达坐标 ( 11 , 0 ) (11,0) (11,0),第二次移动中,友也先向左转,再移动 10 10 10 米到达目的地,此时,友也的坐标为 ( 11 , 10 ) (11,10) (11,10),面向 y y y 轴正方向。
思路
- 使用一个变量 now 来记录当前的朝向。朝向的表示可以通过一个数组来表示四个方向的变化,例如:
0 表示向右(东)
1 表示向上(北)
2 表示向左(西)
3 表示向下(南) - 对于每一个指令:
根据转向指令更新朝向:
‘L’ 表示向左转,朝向加1;
‘B’ 表示掉头,朝向加2;
‘R’ 表示向右转,朝向加3;
根据当前朝向计算坐标的变化,更新 x 和 y。 - 最终输出经过所有指令后的坐标 (x, y) 以及最终的朝向 now。
代码
#include <bits/stdc++.h>
using namespace std;
int fx[] = {1, 0, -1, 0}; // 记录东、北、西、南四个方向的x坐标变化
int fy[] = {0, 1, 0, -1}; // 记录东、北、西、南四个方向的y坐标变化
void solve() {
long long n, x = 0, y = 0; // 初始化坐标
int now = 0; // 初始朝向为东
char op;
long long L;
cin >> n; // 输入指令的数量
for (int i = 1; i <= n; i++) {
cin >> op >> L; // 输入每条指令和移动的距离
if (op == 'L') now = (now + 1) % 4; // 向左转
else if (op == 'B') now = (now + 2) % 4; // 掉头
else if (op == 'R') now = (now + 3) % 4; // 向右转
// 根据当前朝向更新坐标
x += L * fx[now];
y += L * fy[now];
}
cout << x << ' ' << y << ' ' << now << '\n'; // 输出最终坐标和朝向
}
int main() {
int T;
cin >> T; // 输入测试组数
while (T--) {
solve(); // 对每组数据调用solve函数
}
return 0;
}
复杂度分析
时间复杂度
遍历所有的指令的时间复杂度为 O ( n ) O(n) O(n),其中 n n n 为指令的个数。由于对于每组测试数据的处理是独立的,整体复杂度为 O ( n ) O(n) O(n)(其中 n 为每组指令的数量)
空间复杂度
O ( 1 ) O(1) O(1)