#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 时,按下面顺序判断:
- 先把
last_reason更新为当前reason。 - 如果
risk=1或manual=1,立即安全停止,输出SAFE_STOP。 - 否则如果
recover_ok=0,说明无法自动恢复,输出恢复失败。 - 否则如果当前
retries >= max_retry,说明已经没有重试名额,输出重试上限失败。本次失败不再让retries增加。 - 否则执行一次自动恢复并准备重试,令
retries加1,继续处理后续事件。
一旦出现终态,后续事件不再处理。
输入格式
第一行输入:
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_STOP、SUCCESS或FAILED。detail:状态细节。retries:已经成功执行过的自动恢复/重试次数。last_reason:最后一次失败原因。若成功完成,固定输出NONE。
初始时 retries=0,last_reason=NONE。如果所有事件处理完仍未成功、失败或安全停止,输出 FAILED INCOMPLETE retries last_reason。
判定规则
使用标准输出比较。
注意以下边界:
SAFE的输出原因使用当前已经记录的last_reason,如果之前没有失败,则为NONE。SUCCESS总是输出NONE作为最后原因,即使之前发生过可恢复失败。risk=1或manual=1的优先级高于恢复失败和重试上限。- 当
retries已经等于max_retry时,再遇到可恢复失败也不能继续重试。 - 到达终态后必须停止读取逻辑,不能让后续事件改变答案。
数据范围与测试提示
0 <= max_retry <= 10^60 <= recovery_time <= 10^91 <= E <= 10^5reason不含空格。recover_ok、risk、manual均为0或1。
样例
输入样例 1
2 1
2
FAIL SLIP 1 0 0
SUCCESS
输出样例 1
SUCCESS COMPLETED 1 NONE
样例 1 解释
第一次失败原因是 SLIP,可自动恢复,且没有高风险或人工介入,所以 retries 从 0 变为 1。下一条事件是 SUCCESS,任务成功完成,最后原因固定输出 NONE。
输入样例 2
2 1
1
SAFE
输出样例 2
SAFE_STOP STOPPED 0 NONE
样例 2 解释
第一条事件就是安全停止,之前没有失败原因,因此最后一列为 NONE。