#AEAI07009. 跨模块事件驱动任务恢复状态机
跨模块事件驱动任务恢复状态机
题目描述
跨模块执行时,感知、规划、抓取和恢复模块会不断抛出事件。具身智能部需要一个确定性的状态机,把这些事件转成资源更新、恢复动作或安全停止。
你需要按输入顺序处理事件流,维护当前任务状态、资源状态和恢复次数,并在循环保护触发或规则不可继续时输出最终状态。
请不要跳过无效事件,也不要把恢复动作重复应用;每一次状态迁移、资源扣减和停止条件都以题面规则为准。
输入格式
第一行输入十个整数:
stage visible held path_ok placed energy risk max_retry risk_limit max_rec
接下来输入事件数 L。随后 L 行,每行:
event severity
event 可能为 CONF_DOWN、LOST、PATH_BLOCK、GRASP_SLIP、PLACE_ERROR、RISK_UP、TIMEOUT。
输出格式
输出一行:
state processed action_count actions... stage energy risk action_count
state 可能为 RUNNING、SUCCESS、TASK_FAILED 或 SAFE_STOP。
判定规则
按输入顺序处理事件。CONF_DOWN 和 LOST 需要消耗 1 点能量重新观察;PATH_BLOCK 需要消耗 2 点能量恢复路径;GRASP_SLIP、PLACE_ERROR、TIMEOUT 会增加重试次数;RISK_UP 会增加风险,若超过 risk_limit,需消耗 1 点能量执行降险并令风险减少 2 且不低于 0。
若需要恢复但能量不足,输出 SAFE_STOP。若重试次数超过 max_retry,或恢复动作数达到 max_rec,输出 TASK_FAILED。若事件处理结束时 placed = 1 且未失败,输出 SUCCESS。重复遇到同一完整状态视为循环,输出 SAFE_STOP。
数据范围与测试提示
- 所有编号均按题面说明使用 1-based;字符串枚举按输入原样比较。
- 正式测试会覆盖安全停止、无可行分支、阈值等号、并列比较和恢复失败等边界情况。
- 输出只包含题目要求的字段,不要输出调试信息。
样例
输入样例 1
2 0 0 1 0 5 1 2 5 5
2
LOST 0
CONF_DOWN 0
输出样例 1
RUNNING 2 2 1 1 1 3 1 2
输入样例 2
3 1 1 1 0 5 4 2 5 5
1
RISK_UP 3
输出样例 2
RUNNING 1 1 5 1 4 5 1