#M1B. 羊圈指令

羊圈指令

题目背景

在梦幻草原的尽头,伫立着名为 幻影羊圈 的巨型机械迷宫。 整座装置由 NN 个羊圈首尾相连,组成一条环形走廊;相邻羊圈之间通过可开关的魔法门相连,其中

  • 门 1 连接圈 1 与圈 2,
  • …,
  • N1N-1 连接圈 (N1)(N-1) 与圈 NN
  • NN 连接圈 NN 与圈 1(闭合环)。

噜噜与伙伴一只羊共同维护迷宫。为了记录多只魔法小羊的行动轨迹,她们开发了一套功能强大的指令系统,可用来:

  1. 开启或关闭任意魔法门;
  2. 生成(克隆)新小羊;
  3. 控制小羊进行单步/多步移动;
  4. 操作小羊等待、能量增减、位置同步或交换;
  5. 查询任意小羊的实时状态;
  6. 直接传送小羊到指定羊圈。

系统维护全局魔法时间 TT(初始 0),以及每只小羊的位置 PP(圈号)和能量 EE(初始 0,可正可负)。 指令分为 普通指令(耗时 1)和 扩展指令(额外耗时见下表)。所有时间消耗均累计到全局 TT。 如指令引用不存在的羊 id,则整条指令被忽略,但其应耗时间仍正常计入 TT


指令列表与规则

指令 行为描述
OPEN i 打开第 ii 扇魔法门
CLOSE i 关闭第 ii 扇魔法门
SPAWN id 复制出一只 小羊,编号为当前最大 id + 1,位置与能量等同于小羊 id
MOVE id L
MOVE id R
小羊 id 试图向左/右移动 1 格;若对应门关闭则停留原地
JUMP id k L
JUMP id k R
小羊 id 连续尝试移动 kk 步(逐步判门),遇门关闭即停止
WAIT id t 小羊 id 原地等待 tt 时间单位
ENERGY id x 小羊 id 的能量 +xx
SYNC a b 令小羊 ab 位置都变为二者较小圈号
SWAP a b 交换小羊 ab 的位置
STATUS id 记录当前 TT、小羊 id 圈号 PP、能量 EE
TELEPORT id p 将小羊 id 传送到圈 pp(不检查门)

指令 额外耗时 能量变化 备注
OPEN i 0 1iN1 \le i \le N
CLOSE i 同上
SPAWN id id 不存在则忽略
MOVE id L/R 成功移动 1 步则 −1 圈 1 向左需门 NN 开启;圈 NN 向右需门 NN 开启
JUMP id k L/R 每成功一步 −1 k1k \ge 1,跨圈按环形连接判门
WAIT id t + tt +tt t0t \ge 0
ENERGY id x 0 +xx xx 可负
SYNC a b a、b 同时存在才生效
SWAP a b
STATUS id id 不存在:记录 P=1,E=0P=-1,E=0
TELEPORT id p 1pN1 \le p \le N

耗时说明

  • 每条指令 执行均消耗 1 个时间单位。
  • WAIT id t 的总耗时 = 1 (指令)+ tt (额外)。

能量规则

  • MOVE / JUMP成功步数 使能量 −1。
  • WAIT 使能量 +tt
  • ENERGY 可直接加减任意整数。
  • 其他指令不影响能量。
  • 能量 EE 可为任意整数(正、负或 0),系统对 E=0E=0 无特殊限制。

系统按输入顺序依次执行所有指令。每遇 STATUS 即把记录 (T,P,E)(T,P,E) 追加到结果序列。 最终输出所有记录,记记录条数为 KK


输入格式

  1. 一行三个整数 NN QQ SS:羊圈数、指令数、初始小羊数量。

  2. 一行 NN 个整数:第 ii 个为门 i 初始状态(0=关,1=开)。

  3. 一行 SS 个整数:按编号 1…SS 给出每只小羊的初始圈号(能量均 0)。

  4. 接下来 QQ 行,每行一条指令(格式见上表),关键字与参数用单空格分隔,所有数字为十进制有符号整数。

    说明:系统初始拥有 SS 只小羊,编号(id) 分别为 1, 2, …, SS


输出格式

  • 第 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 1N,Q101\le N,Q\le10 20 %
2 1N,Q10001\le N,Q\le1000 30 %
3 1N,Q5×1051\le N,Q\le5\times10^5 50 %

额外统一限制:

  • 1S2×1051\le S\le2\times10^5
  • 所有圈号满足 1PN1\le P\le N
  • 所有整数参数均在 32 位有符号整数范围内;
  • 输入格式保证合法、数值满足描述。

各指令参数约束:

指令 参数 取值范围
OPEN i / CLOSE i ii 1iN1 \le i \le N
SPAWN id idid 1idS+Q1 \le id \le S + Q
MOVE id L/R
JUMP id k L/R id,kid, k 1idS+Q,    1k201 \le id \le S + Q,\;\;1 \le k \le 20
WAIT id t id,tid, t 1idS+Q,    0t1091 \le id \le S + Q,\;\;0 \le t \le 10^9
ENERGY id x id,xid, x 1idS+Q,    109x1091 \le id \le S + Q,\;\;-10^9 \le x \le 10^9
SYNC a b / SWAP a b a,ba, b 1a,bS+Q1 \le a,b \le S + Q
STATUS id idid 1idS+Q1 \le id \le S + Q
TELEPORT id p id,pid, p 1idS+Q,    1pN1 \le id \le S + Q,\;\;1 \le p \le N