#P5506. 封锁
封锁
题目背景
Steve 带领队伍准备去 M 星消灭黑暗势力,即将降落时被 M 星上空的无人机拦截了。
题目描述
为了突破封锁,成功降落, Steve 使用了电磁干扰仪,使无人机开始自相残杀。
然而,情况很快就变得混乱,无法了解当前的情况。
幸好 Steve 的部队已经记录了开始混战前的状况,并设法获得了无人机执行操作的顺序。
每架无人机有 项属性 ,当前生命值 ,当前坐标 ,当前水平朝向 ( 范围 0-7) 和竖直朝向 ( 范围 0-4) 。
每一时刻,所有存活的无人机会先向正前方移动一格。
随后,存活的无人机会按编号从小到大依次执行下列操作之一:
无操作 (N)
上下转向 (U/D) :改变 的值,上为增加,下为减少,如果超过了范围就是无效操作,忽略。
左右转向 (L/R) :改变 的值,左为增加,右为减少,循环(分别对应从上面看的逆时针,顺时针)。
例如:当 时操作 U 无效,当 时操作 R 会使 变为 。
修复 (F) :使 增加 点。
子弹 (A) :使位于这架无人机正前方最近的飞机受到伤害,伤害的值为当前飞机的 值与目标的 值之差(差为负则不会造成伤害),如果多架飞机处于同一位置,那么只有编号最小的飞机会受到伤害。
激光 (M) :使位于这架无人机正前方的所有飞机受到伤害,伤害的值为当前飞机的 值与目标的 值之差(差为负则不会造成伤害)。
注意:与开火飞机重叠的飞机不会受到伤害
如果受到伤害后, ,那么这架飞机就会坠毁。
对于 和 ,它的“正前方”是这样定义的:
首先,根据 确定 方向,如下图。
随后,根据 进一步确定方向。
对于 或 ,正前方是正下或正上( 不变, 变化)。
对于 或 ,在上面方向的基础上再向下/上移动一格。
对于 ,正前方为水平方向( 如上所述, 不变)。
(有人反馈看不懂方向,这里直接给出 和正前方 的对应表)
现在, Steve 告诉你了所有飞机初始的状态和之后执行的操作。
你需要告诉他,经过 个时刻的混战之后,每架飞机的位置和生命值。
输入格式
第一行两个整数 ,表示飞机数和时刻数。
接下来 行,每行 个整数和一个长为 字符串,按编号顺序描述无人机。
这 个整数分别为 ,其中 为初始生命值。
字符串的每一个字符均为大写字母,依次表示这 个时刻的操作。
输出格式
行,每行 个整数 。
如果这架飞机没有坠毁,则输出坐标和最终的生命值。
否则,输出坠毁前的坐标, 输出 。
4 7
-1 -1 0 2 1 1 0 0 0 5 0 RAAAAAA
51 0 1 1 4 0 0 1 0 5 0 UMMMMMM
-2 0 0 2 0 0 0 0 0 5 1 FFFNNNN
53 0 0 2 4 0 0 0 0 5 1 FFFNNNN
6 0 0 1
45 0 0 0
5 0 0 4
46 0 0 7
7 1
0 0 0 0 0 2 0 0 0 1 0 A
1 0 0 0 0 4 0 0 0 3 0 A
1 0 0 0 0 1 1 1 1 4 0 N
1 0 -1 0 0 0 0 0 0 2 0 N
0 1 0 0 0 0 0 3 0 3 0 M
0 1 -1 0 0 0 0 0 1 3 0 N
0 1 -1 0 0 0 0 0 2 3 0 N
0 0 -1 1
1 0 -1 3
1 0 -1 4
1 0 -2 2
0 1 -1 3
0 1 -2 1
0 1 -2 2
提示
两架飞机移动并改变朝向后互相面对,随后它们分别向对面疯狂开火,最终 1 号飞机率先击落 2 号飞机,因为 2 号飞机已经坠毁,所以 1 号飞机不会被击落。
而它们身后分别跟着两架飞机, 2 号飞机使用激光,所以 3 号飞机也会受到伤害, 1 号飞机使用子弹,所以 4 号飞机不会受到伤害,直到 2 号飞机坠毁后, 1 号飞机发出最后一颗子弹,对 4 号飞机造成了一点伤害。同时两架飞机前三次操作分别进行了三次修复, 增加了 。
测试时,每个 Subtask 包括 3 个测试点,全部通过才能得到该 Subtask 的分数
样例 2 解释:https://www.luogu.com.cn/discuss/582252
数据范围:
输入的所有数字大小在合理范围内,且绝对值均不大于 。
其中 为非负整数。
为正整数。
为整数。
为 中的一个。
为 中的一个。
字符串仅包含 种字符。
另外,对于前 3 个 subtask ,保证任何时刻飞机的 z 坐标为 。
Subtask | 分值 | 出现的操作 |
---|---|---|
1 | 12 | N |
2 | 14 | NF |
3 | 15 | NFLR |
4 | 17 | NFLRUD |
5 | 19 | NFLRUDM |
6 | 23 | NFLRUDMA |