#M1B. 羊圈指令
羊圈指令
题目背景
在梦幻草原的尽头,伫立着名为 幻影羊圈 的巨型机械迷宫。 整座装置由 个羊圈首尾相连,组成一条环形走廊;相邻羊圈之间通过可开关的魔法门相连,其中
- 门 1 连接圈 1 与圈 2,
- …,
- 门 连接圈 与圈 ,
- 门 连接圈 与圈 1(闭合环)。
噜噜与伙伴一只羊共同维护迷宫。为了记录多只魔法小羊的行动轨迹,她们开发了一套功能强大的指令系统,可用来:
- 开启或关闭任意魔法门;
- 生成(克隆)新小羊;
- 控制小羊进行单步/多步移动;
- 操作小羊等待、能量增减、位置同步或交换;
- 查询任意小羊的实时状态;
- 直接传送小羊到指定羊圈。
系统维护全局魔法时间 (初始 0),以及每只小羊的位置 (圈号)和能量 (初始 0,可正可负)。 指令分为 普通指令(耗时 1)和 扩展指令(额外耗时见下表)。所有时间消耗均累计到全局 。 如指令引用不存在的羊 id,则整条指令被忽略,但其应耗时间仍正常计入 。
指令列表与规则
指令 | 行为描述 |
---|---|
OPEN i |
打开第 扇魔法门 |
CLOSE i |
关闭第 扇魔法门 |
SPAWN id |
复制出一只 新 小羊,编号为当前最大 id + 1,位置与能量等同于小羊 id |
MOVE id L MOVE id R |
小羊 id 试图向左/右移动 1 格;若对应门关闭则停留原地 |
JUMP id k L JUMP id k R |
小羊 id 连续尝试移动 步(逐步判门),遇门关闭即停止 |
WAIT id t |
小羊 id 原地等待 时间单位 |
ENERGY id x |
小羊 id 的能量 + |
SYNC a b |
令小羊 a 、b 位置都变为二者较小圈号 |
SWAP a b |
交换小羊 a 与 b 的位置 |
STATUS id |
记录当前 、小羊 id 圈号 、能量 |
TELEPORT id p |
将小羊 id 传送到圈 (不检查门) |
指令 | 额外耗时 | 能量变化 | 备注 |
---|---|---|---|
OPEN i |
0 | — | |
CLOSE i |
同上 | ||
SPAWN id |
若 id 不存在则忽略 |
||
MOVE id L/R |
成功移动 1 步则 −1 | 圈 1 向左需门 开启;圈 向右需门 开启 | |
JUMP id k L/R |
每成功一步 −1 | ,跨圈按环形连接判门 | |
WAIT id t |
+ | + | |
ENERGY id x |
0 | + | 可负 |
SYNC a b |
— | a、b 同时存在才生效 | |
SWAP a b |
— | ||
STATUS id |
若 id 不存在:记录 |
||
TELEPORT id p |
耗时说明
- 每条指令 执行均消耗 1 个时间单位。
WAIT id t
的总耗时 = 1 (指令)+ (额外)。
能量规则
- 仅
MOVE
/JUMP
的 成功步数 使能量 −1。WAIT
使能量 +。ENERGY
可直接加减任意整数。- 其他指令不影响能量。
- 能量 可为任意整数(正、负或 0),系统对 无特殊限制。
系统按输入顺序依次执行所有指令。每遇 STATUS
即把记录 追加到结果序列。
最终输出所有记录,记记录条数为 。
输入格式
-
一行三个整数 :羊圈数、指令数、初始小羊数量。
-
一行 个整数:第 个为门
i
初始状态(0=关,1=开)。 -
一行 个整数:按编号 1… 给出每只小羊的初始圈号(能量均 0)。
-
接下来 行,每行一条指令(格式见上表),关键字与参数用单空格分隔,所有数字为十进制有符号整数。
说明:系统初始拥有 只小羊,编号(id) 分别为 1, 2, …, 。
输出格式
-
第 1 行输出整数
K
——记录条数。 -
随后
K
行,每行三个整数T P E
(按记录出现顺序):T
:执行该STATUS
时的全局时间;P
:小羊圈号(若小羊不存在则 −1);E
:小羊能量(若小羊不存在则 0)。
样例
5 9 1
1 0 1 1 1
3
MOVE 1 R
STATUS 1
OPEN 2
JUMP 1 2 R
STATUS 1
WAIT 1 4
ENERGY 1 -3
STATUS 1
STATUS 2
4
2 4 -1
5 1 -3
12 1 -2
13 -1 0
样例解释
步骤 | 指令 | 指令耗时 | 指令结束后 T | 位置 / 能量变化 | 记录 |
---|---|---|---|---|---|
初始 | — | 0 | 圈 3 / 0 | — | |
1 | MOVE 1 R |
+1 | 1 | 圈 3→4,能量 0→−1 | |
2 | STATUS 1 |
2 | 圈 4 / −1 | (2 4 −1) | |
3 | OPEN 2 |
3 | — | — | |
4 | JUMP 1 2 R |
4 | 第 1 步:4→5,能量 −1→−2 第 2 步:5→1(经门 5),能量 −2→−3 |
||
5 | STATUS 1 |
5 | 圈 1 / −3 | (5 1 −3) | |
6 | WAIT 1 4 |
+1+4 | 10 | 能量 −3→ −3+4 = 1 | — |
7 | ENERGY 1 -3 |
+1 | 11 | 能量 1→ −2 | |
8 | STATUS 1 |
12 | 圈 1 / −2 | (12 1 −2) | |
9 | STATUS 2 (羊 2 不存在) |
13 | — | (13 −1 0) |
数据范围与子任务
子任务 | 约束 | 分值 |
---|---|---|
1 | 20 % | |
2 | 30 % | |
3 | 50 % |
额外统一限制:
- ;
- 所有圈号满足 ;
- 所有整数参数均在 32 位有符号整数范围内;
- 输入格式保证合法、数值满足描述。
各指令参数约束:
指令 | 参数 | 取值范围 |
---|---|---|
OPEN i / CLOSE i |
||
SPAWN id |
||
MOVE id L/R |
||
JUMP id k L/R |
||
WAIT id t |
||
ENERGY id x |
||
SYNC a b / SWAP a b |
||
STATUS id |
||
TELEPORT id p |
相关
在下列比赛中: