A85336.「THUPC 2024 初赛」机器人
省选/NOI-
通过率:0%
时间限制:1.00s
内存限制:512MB
题目描述
有 n 个机器人围成一圈,编号按照逆时针顺序分别为 0∼n−1。
每个机器人有两只手。编号为 i 的机器人初始「左手」指向编号 li 的机器人,「右手」指向编号 ri 的机器人。
所有的机器人内部都写有 m 行「指令」,「指令」有以下这些形式:
指令
「指令」分为「基础指令」和「高级指令」两种。「高级指令」的功能会更复杂一些,但它们本质上没有多大区别。下面介绍这些「指令」的格式以及它们被「执行」时的效果。文中的“自己”一词均指拥有这条「指令」的机器人。
基础指令
SLACKOFF:「摸鱼」,即什么也不做。MOVE h z:将第 h 只手向逆时针方向 「移动」 z 个机器人的位置。当 h=0 时表示「左手」,当 h=1 时表示「右手」,下同。SWAP h x y:将第 h 只手指向的机器人的第 x 行「指令」与自己的第 y 行「指令」 「对调」。MIRROR h x:将第 h 只手指向的机器人的第 x 行「指令」「镜像」 取反,即将「指令」中的 h 取反(0 变成 1,1 变成 0)。特殊地,它对SLACKOFF指令没有效果;而对TRIGGER指令,会直接修改「触发」时「执行」的「指令」中的 h。REPLACE h x <COMMAND>:将第 h 只手指向的机器人的第 x 行「指令」「替换」 为<COMMAND>。其中<COMMAND>为一条完整的「指令」。
高级指令
-
ACTIVATE h:「激活」 第 h 只手指向的机器人,即按顺序「执行」那个机器人的所有「指令」。前一行「指令」「执行」完毕之后才会「执行」后一行。注意在「执行」前面的「指令」时后面的「指令」可能会发生更改,这时需要「执行」更改后的「指令」。当那个机器人的所有「指令」「执行」完毕后,该「指令」才算「执行」完毕。 -
TRIGGER <COMMANDNAME>: <COMMAND>:其中<COMMANDNAME>表示「指令」的名称,即一条「指令」中的第一个全大写单词;<COMMAND>表示一条完整的「基础指令」。TRIGGER指令不会被「执行」,即按顺序「执行」时会跳过该「指令」。但是,当一个 其他 机器人「执行」完一条「指令」之后,且「右手」指向自己的时候,自己最靠前的满足如下条件的TRIGGER指令(如果有)就会被 「触发」——「执行」一次对应的<COMMAND>:<COMMANDNAME>不为TRIGGER时,刚刚「执行」完毕的「指令」为<COMMANDNAME>指令;<COMMANDNAME>为TRIGGER时,刚刚「执行」完毕的「指令」是TRIGGER指令被「触发」时「执行」的「指令」。
「执行」完毕后会回到原来的「执行」顺序中。
你需要从 0 号机器人开始按照编号顺序一圈又一圈地「激活」这些机器人,并输出「执行」的前 k 条指令的有关信息。
输入格式
第一行三个正整数 n,m,k。
接下来按照编号从小到大的顺序表示 n 个机器人的信息。
对于每个机器人,第一行两个非负整数 li,ri 表示「左手」指向的机器人编号和「右手」指向的机器人编号。
接下来 m 行,按顺序表示机器人的「指令」,「指令」的格式见题目描述。
输出格式
输出 k 行,按顺序描述前 k 条开始「执行」的指令的相关信息,在开始「执行」前输出,每条一行,格式如下:
- 「摸鱼」时输出
Robot <id> slacks off.。其中<id>为一个整数,表示「执行」当前「指令」的机器人编号,下同。 - 「移动」时输出
Robot <id> moves its <side> hand towards Robot <id2>.。其中<side>为left或right,表示移动了哪只手(left表示「左手」,right表示「右手」);<id2>为一个整数,表示移动之后这只手指向的机器人的编号。 - 「对调」时输出
Robot <id> swaps a line of command with Robot <id2>.。其中<id2>为一个整数,表示与之「对调」「指令」的机器人编号。 - 「镜像」取反时输出
Robot <id> modifies a line of command of Robot <id2>.。其中<id2>为一个整数,表示被「镜像」取反「指令」的机器人编号。 - 「替换」时输出
Robot <id> replaces a line of command of Robot <id2>.。其中<id2>为一个整数,表示被「替换」「指令」的机器人编号。 - 「执行」
ACTIVATE指令「激活」(区别于你的一圈又一圈的「激活」)时输出Robot <id> activates Robot <id2>.。其中<id2>为一个整数,表示被「激活」的机器人编号。 TRIGGER指令由于不会被「执行」就不需要输出,但当它们被「触发」时,仍然需要按照上面的格式输出对应的「基础指令」被「执行」的信息。
输入输出样例
输入#1
2 2 5 0 0 MOVE 1 1 MOVE 0 1 0 1 TRIGGER MOVE: MOVE 0 1 SLACKOFF
输出#1
Robot 0 moves its right hand towards Robot 1. Robot 1 moves its left hand towards Robot 1. Robot 0 moves its left hand towards Robot 1. Robot 1 moves its left hand towards Robot 0. Robot 1 slacks off.
输入#2
2 2 4 0 1 ACTIVATE 1 SLACKOFF 0 1 SWAP 0 2 2 MIRROR 0 1
输出#2
Robot 0 activates Robot 1. Robot 1 swaps a line of command with Robot 0. Robot 1 slacks off. Robot 0 modifies a line of command of Robot 0.
输入#3
3 2 6 1 2 ACTIVATE 0 ACTIVATE 0 2 1 SWAP 0 2 2 TRIGGER ACTIVATE: REPLACE 0 2 SLACKOFF 0 1 TRIGGER MIRROR: SLACKOFF SLACKOFF
输出#3
Robot 0 activates Robot 1. Robot 1 swaps a line of command with Robot 2. Robot 1 slacks off. Robot 2 replaces a line of command of Robot 0. Robot 0 slacks off. Robot 1 swaps a line of command with Robot 2.
输入#4
3 2 8 0 1 SLACKOFF TRIGGER MOVE: SLACKOFF 1 2 TRIGGER TRIGGER: SLACKOFF TRIGGER SLACKOFF: MOVE 0 1 2 0 TRIGGER SLACKOFF: MOVE 1 2 TRIGGER TRIGGER: MOVE 1 1
输出#4
Robot 0 slacks off. Robot 1 moves its left hand towards Robot 2. Robot 2 moves its right hand towards Robot 1. Robot 1 slacks off. Robot 2 moves its right hand towards Robot 0. Robot 0 slacks off. Robot 1 slacks off. Robot 2 moves its right hand towards Robot 2.