#AEAI06002. 多对象工位状态一致性维护
多对象工位状态一致性维护
题目描述
具身智能部的分拣机器人会同时维护多个物体的工位、可抓取状态和完成状态。日志中可能出现观察、移动、抓取、放置、回退和取消等操作,你需要逐条检查这些操作是否破坏状态一致性。
共有 n 个物体、m 个区域,物体编号为 1..n,区域编号为 1..m。物体位置 loc[x] 为 1..m 表示在某区域,0 表示正被夹爪持有,-1 表示已取消。机器人当前区域为 robot_area,当前持有物体为 held,held=0 表示未持有。
在处理操作前,若初始 held 非零但编号非法或对应物体位置不是 0,应输出 INCONSISTENT 0 1。之后从第 1 条日志开始检查:
OBSERVE x:x必须是合法且未取消的物体,执行后清除其复核标记。MOVE a:a必须是合法区域,执行后机器人移动到a;当a=m时安全区标记为1,否则为0。PICK x:x必须合法、未取消、未完成;夹爪必须为空;物体必须在机器人当前区域;且grasp[x]=1。执行后held=x, loc[x]=0。PLACE x a:物体和区域都必须合法;夹爪必须持有物体x。执行后放到区域a,若a=m则该物体完成。ROLLBACK a:a必须是合法区域,执行后机器人回退到该区域,并按是否为m更新安全区标记。CANCEL x:x必须合法,且不能正在被持有。执行后该物体位置设为-1,可抓取标记设为0。
若操作非法,立即输出 INCONSISTENT step code。错误码按上述检查顺序产生:非法编号或未知操作为 1,已取消为 2,已完成为 3,夹爪非空为 4,物体不在当前区域为 5,无可放置/取消的持有物为 6,持有物不匹配为 7,不可抓取为 8。
输入格式
第一行输入 n m。接下来 n 行,第 i 行输入:
loc[i] grasp[i] done[i] review[i]
随后一行输入 robot_area held safe_area。下一行输入整数 k,之后输入 k 条操作,格式为上文列出的六种之一。
输出格式
若发现不一致,输出:
INCONSISTENT step code
若所有操作一致,输出:
CONSISTENT loc[1] loc[2] ... loc[n] robot_area held cnt
其中 cnt 为完成物体数量。
数据范围与测试提示
- 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
- 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
- 对象编号可能非法,物体可能已取消、已完成或不在当前区域;这些分支会出现在隐藏数据里。
PICK、MOVE、PLACE、CANCEL的状态更新会互相影响,请保持夹爪、位置和完成标记一致。- 初始
held!=0但对象非法或loc[held]!=0要在第 0 步报错;CANCEL后对象不可再观察或抓取。
样例
输入样例 1
2 3
1 1 0 1
2 1 0 0
1 0 0
5
OBSERVE 1
PICK 1
MOVE 3
PLACE 1 3
ROLLBACK 2
输出样例 1
CONSISTENT 3 2 2 0 1
输入样例 2
2 3
1 1 0 0
1 1 0 0
1 0 0
2
PICK 1
PICK 2
输出样例 2
INCONSISTENT 2 4