#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 actions
  • FAILED VERIFY actions
  • FAILED 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