#AEAI04017. 抓取任务状态机模拟
抓取任务状态机模拟
题目描述
一次抓取任务要依次经历选点、移动、闭合夹爪、抬升和验证五个阶段。给出预检查结果、每个阶段的超时时间,以及按时间到达的事件序列,请模拟状态机并输出任务结果。
阶段顺序和期望事件分别为:
SELECT_GRASP 等待 SELECTED
MOVE_ARM 等待 ARRIVED
CLOSE_GRIPPER 等待 CLOSED
LIFT 等待 LIFTED
VERIFY 等待 VERIFIED
若任一预检查不通过,任务立即失败。进入某阶段后,若事件时间与该阶段开始时间之差超过该阶段超时时间,则任务超时失败。验证阶段收到 VERIFY_FAIL 时任务验证失败。
输入格式
第一行输入三个整数 cand_ok path_ok grip_ok,表示候选、路径和夹爪预检查是否通过。
第二行输入 5 个实数,表示五个阶段的超时时间。
第三行输入事件数量 E。
接下来 E 行,每行输入 time event。
输出格式
若预检查失败,输出 FAILED PRECHECK 0。
若五个阶段全部完成,输出 SUCCESS DONE actions。
若过程中失败,输出:
FAILED TIMEOUT actionsFAILED VERIFY actionsFAILED WAITING actions
其中 actions 为已经成功完成的阶段数。
判定规则
使用标准输出比较。事件按输入顺序处理;只有当前阶段期望事件会推进状态。阶段开始时间初始为 0,每完成一个阶段后更新为该事件时间。
数据范围与测试提示
- 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
- 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
- 事件序列可能为空、提前成功、提前失败或在终止后仍有后续事件;终止后不要继续改变状态。
- 状态机每个阶段的输出字段固定,隐藏数据会检查重入、非法事件和边界计数。
- 超时判断为
tm - stage_start > timeout,等于超时仍允许;事件用尽但未完成输出等待失败分支。
样例
输入样例 1
1 1 1
5 5 5 5 5
5
1 SELECTED
2 ARRIVED
3 CLOSED
4 LIFTED
5 VERIFIED
输出样例 1
SUCCESS DONE 5
输入样例 2
1 0 1
5 5 5 5 5
0
输出样例 2
FAILED PRECHECK 0