B. 回声机器人

    传统题 1000ms 256MiB

回声机器人

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

回声机器人

题目描述

机器人站在无限二维网格上,初始位置为 (0,0)(0,0),朝向北。

所有格子的灯初始都是灭的。

给定一个命令串 ss,字符串中只包含 FLRE 四种字符。你需要从左到右依次执行每个命令。

命令含义如下:

  • F:向当前朝向前进一步;
  • L:向左转 9090^\circ
  • R:向右转 9090^\circ
  • E:执行“上一次非 E 命令”的反向命令。

反向命令的规则如下:

  • F 的反向:沿当前朝向后退一步;
  • L 的反向:向右转 9090^\circ
  • R 的反向:向左转 9090^\circ

如果在某个 E 之前没有出现过非 E 命令,那么这个 E 什么也不做。

注意,E 本身不会更新“上一次非 E 命令”。

E 只根据“上一次非 E 命令的类型”执行反向操作,不记录那条命令执行时的位置或朝向。也就是说,E 不是撤销操作。

每处理完一个字符后,机器人当前所在格子的灯会翻转一次:

  • 如果当前格子的灯是灭的,则变亮;
  • 如果当前格子的灯是亮的,则熄灭。

最后请输出机器人的最终坐标,以及亮着的格子数量。

输入格式

第一行输入一个整数 tt,表示测试数据组数。

接下来 tt 行,每行输入一个字符串 ss

数据范围

对于所有测试数据,保证:

1t1041 \le t \le 10^4

1s1 \le |s|

所有测试数据的 s|s| 之和不超过 2×1052 \times 10^5

字符串 ss 仅包含 FLRE

输出格式

对于每组测试数据,输出一行三个整数:

x y k

表示机器人最终所在坐标为 (x,y)(x,y),最后亮着的格子数量为 kk

输入输出样例 #1

输入 #1

3
FEFL
EEE
FLER

输出 #1

0 1 2
0 0 1
0 1 0

说明/提示

对于第一组数据 FEFL

  • F:走到 (0,1)(0,1),翻转 (0,1)(0,1)
  • E:上一个非 E 命令是 F,所以沿当前朝向后退到 (0,0)(0,0),翻转 (0,0)(0,0)
  • F:走到 (0,1)(0,1),翻转 (0,1)(0,1)
  • L:左转,位置仍为 (0,1)(0,1),翻转 (0,1)(0,1)

最终机器人在 (0,1)(0,1),亮着的格子有 22 个。

对于第二组数据 EEE,三个 E 都没有可执行的回声命令,但每次仍然会翻转当前位置 (0,0)(0,0) 的灯。

(0,0)(0,0) 被翻转三次,最后亮着,所以输出:

0 0 1

对于第三组数据 FLER

  • F 后到达 (0,1)(0,1),翻转一次;
  • L 只改变方向,不移动,在 (0,1)(0,1) 翻转一次;
  • E 执行 L 的反向,也只改变方向,在 (0,1)(0,1) 翻转一次;
  • R 只改变方向,在 (0,1)(0,1) 翻转一次。

四次翻转都发生在 (0,1)(0,1),偶数次翻转后灯熄灭,所以亮灯数为 00

【睿爸信奥】入门组算法周赛(20260523)

未参加
状态
已结束
规则
IOI
题目
4
开始于
2026-5-23 0:00
结束于
2026-5-30 0:00
持续时间
4 小时
主持人
参赛人数
15