#AEAI04018. 带恢复与重试限制的执行状态机

带恢复与重试限制的执行状态机

AEAI-04-018. 带恢复与重试限制的执行状态机

题目描述

机器人执行一次抓取任务时,控制器会按时间顺序收到若干事件。每个事件表示任务成功、安全停止,或一次执行失败。你需要模拟这个简单状态机,输出任务最终停在哪一种状态。

本题只关心事件顺序、重试次数和安全优先级,不需要计算真实运动轨迹。recovery_time 是恢复流程的配置参数,只需要读入,不参与输出计算。

事件共有三类:

  • SAFE:外部安全系统触发,任务必须立刻安全停止。
  • SUCCESS:任务完成,立刻输出成功。
  • FAIL reason recover_ok risk manual:发生一次失败。

FAIL 事件中的字段含义如下:

  • reason:失败原因字符串。
  • recover_ok:是否允许自动恢复,1 表示可以恢复,0 表示不能恢复。
  • risk:是否高风险,1 表示高风险。
  • manual:是否需要人工介入,1 表示需要人工介入。

处理一条 FAIL 时,按下面顺序判断:

  1. 先把 last_reason 更新为当前 reason
  2. 如果 risk=1manual=1,立即安全停止,输出 SAFE_STOP
  3. 否则如果 recover_ok=0,说明无法自动恢复,输出恢复失败。
  4. 否则如果当前 retries >= max_retry,说明已经没有重试名额,输出重试上限失败。本次失败不再让 retries 增加。
  5. 否则执行一次自动恢复并准备重试,令 retries1,继续处理后续事件。

一旦出现终态,后续事件不再处理。

输入格式

第一行输入:

max_retry recovery_time

其中 max_retry 是最多允许自动恢复并重试的次数,recovery_time 只作为配置参数读入。

第二行输入事件数量 E

接下来 E 行,每行输入一个事件,格式为以下三种之一:

SAFE
SUCCESS
FAIL reason recover_ok risk manual

输出格式

输出一行:

status detail retries last_reason

可能的输出形式为:

SAFE_STOP STOPPED retries reason
SUCCESS COMPLETED retries NONE
FAILED RECOVERY retries reason
FAILED RETRY_LIMIT retries reason
FAILED INCOMPLETE retries last_reason

字段说明:

  • status:最终状态,可能为 SAFE_STOPSUCCESSFAILED
  • detail:状态细节。
  • retries:已经成功执行过的自动恢复/重试次数。
  • last_reason:最后一次失败原因。若成功完成,固定输出 NONE

初始时 retries=0last_reason=NONE。如果所有事件处理完仍未成功、失败或安全停止,输出 FAILED INCOMPLETE retries last_reason

判定规则

使用标准输出比较。

注意以下边界:

  • SAFE 的输出原因使用当前已经记录的 last_reason,如果之前没有失败,则为 NONE
  • SUCCESS 总是输出 NONE 作为最后原因,即使之前发生过可恢复失败。
  • risk=1manual=1 的优先级高于恢复失败和重试上限。
  • retries 已经等于 max_retry 时,再遇到可恢复失败也不能继续重试。
  • 到达终态后必须停止读取逻辑,不能让后续事件改变答案。

数据范围与测试提示

  • 0 <= max_retry <= 10^6
  • 0 <= recovery_time <= 10^9
  • 1 <= E <= 10^5
  • reason 不含空格。
  • recover_okriskmanual 均为 01

样例

输入样例 1

2 1
2
FAIL SLIP 1 0 0
SUCCESS

输出样例 1

SUCCESS COMPLETED 1 NONE

样例 1 解释

第一次失败原因是 SLIP,可自动恢复,且没有高风险或人工介入,所以 retries0 变为 1。下一条事件是 SUCCESS,任务成功完成,最后原因固定输出 NONE

输入样例 2

2 1
1
SAFE

输出样例 2

SAFE_STOP STOPPED 0 NONE

样例 2 解释

第一条事件就是安全停止,之前没有失败原因,因此最后一列为 NONE