#AEAI05001. 受限搬运状态转移

受限搬运状态转移

题目描述

自动化科协具身智能部正在调试一台搬运机器人。场地被抽象成若干区域,区域之间有无向通道;机器人一次只执行一个动作,你需要判断该动作是否合法,并模拟执行后的状态、即时奖励和终止原因。

区域类型可能包含 NORMALTARGETDROPCHARGEDANGER。机器人状态由当前位置 pos、是否持有物体 hold、剩余能量 energy、危险标记 danger 组成,动作编号含义如下:

  • 1:移动到 target,要求 targetpos 相邻且 energy > 0
  • 2:在当前位置抓取,要求当前位置为 TARGEThold = 0energy > 0
  • 3:在当前位置放下,要求当前位置为 DROPhold = 1
  • 4:充电,要求当前位置为 CHARGE
  • 5:回退到 target,要求与移动相同。
  • 6:主动停止,始终合法。

合法移动或回退会到达 target 并消耗 1 点能量;若新位置为 DANGER,危险标记变为 1。抓取消耗 1 点能量并令 hold = 1;放下令 hold = 0 并终止;充电令能量恢复为 max_energy;主动停止直接终止。非法动作不改变状态,只获得非法动作奖励。

即时奖励按输入给出的 9 个奖励参数计算:move_r pick_r drop_r charge_r retreat_r stop_r illegal_r risk_pen energy_pen。移动奖励为 move_r - energy_pen,回退奖励为 retreat_r - energy_pen,若到达危险区域再加上 risk_pen;抓取奖励为 pick_r - energy_pen;其余动作使用对应奖励。

输入格式

第一行输入两个整数 N M,表示区域数和通道数。

第二行输入 N 个字符串,表示 1 到 N 号区域的类型。

接下来 M 行,每行输入两个整数 u v,表示一条无向通道。

接下来一行输入 7 个整数:

pos hold energy danger action target max_energy

最后一行输入 9 个实数:

move_r pick_r drop_r charge_r retreat_r stop_r illegal_r risk_pen energy_pen

区域和动作编号均为 1-based。

输出格式

输出一行:

LEGAL_OR_ILLEGAL pos hold energy danger reward terminal reason

第一项为 LEGALILLEGALreward 保留 6 位小数。

terminal 表示执行后是否终止。reason 的含义为:0 未终止,1 成功放下,2 能量耗尽,3 进入危险状态,4 主动停止。

判定规则

若动作非法,输出原状态、illegal_rterminal = 0reason = 0

若动作合法且尚未因放下或主动停止终止,则先检查能量是否 <= 0,是则以原因 2 终止;否则若 danger = 1,以原因 3 终止。

使用标准输出比较,所有浮点数保留 6 位小数。

数据范围与测试提示

  • 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
  • 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
  • 搬运状态可能出现夹爪为空、目标已完成、区域不匹配或动作非法等情况,错误分支要按固定优先级判断。
  • 事件序列可能在中途终止,终止后不要继续执行后续动作;编号按题面基准处理。
  • 能量必须大于 0 才能移动或抓取;动作后能量到 0 会终止,非法动作保持原状态且不终止。

样例

输入样例 1

4 3
NORMAL TARGET DROP CHARGE
1 2
2 3
1 4
1 0 3 0 1 2 5
-1 5 10 2 -2 -5 -20 -30 1

输出样例 1

LEGAL 2 0 2 0 -2.000000 0 0

输入样例 2

3 1
NORMAL TARGET DROP
1 2
1 0 2 0 2 0 5
-1 5 10 2 -2 -5 -20 -30 1

输出样例 2

ILLEGAL 1 0 2 0 -20.000000 0 0