#AEAI05001. 受限搬运状态转移
受限搬运状态转移
题目描述
自动化科协具身智能部正在调试一台搬运机器人。场地被抽象成若干区域,区域之间有无向通道;机器人一次只执行一个动作,你需要判断该动作是否合法,并模拟执行后的状态、即时奖励和终止原因。
区域类型可能包含 NORMAL、TARGET、DROP、CHARGE、DANGER。机器人状态由当前位置 pos、是否持有物体 hold、剩余能量 energy、危险标记 danger 组成,动作编号含义如下:
1:移动到target,要求target与pos相邻且energy > 0。2:在当前位置抓取,要求当前位置为TARGET、hold = 0且energy > 0。3:在当前位置放下,要求当前位置为DROP且hold = 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
第一项为 LEGAL 或 ILLEGAL。reward 保留 6 位小数。
terminal 表示执行后是否终止。reason 的含义为:0 未终止,1 成功放下,2 能量耗尽,3 进入危险状态,4 主动停止。
判定规则
若动作非法,输出原状态、illegal_r、terminal = 0、reason = 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