#AEAI06002. 多对象工位状态一致性维护

多对象工位状态一致性维护

题目描述

具身智能部的分拣机器人会同时维护多个物体的工位、可抓取状态和完成状态。日志中可能出现观察、移动、抓取、放置、回退和取消等操作,你需要逐条检查这些操作是否破坏状态一致性。

共有 n 个物体、m 个区域,物体编号为 1..n,区域编号为 1..m。物体位置 loc[x]1..m 表示在某区域,0 表示正被夹爪持有,-1 表示已取消。机器人当前区域为 robot_area,当前持有物体为 heldheld=0 表示未持有。

在处理操作前,若初始 held 非零但编号非法或对应物体位置不是 0,应输出 INCONSISTENT 0 1。之后从第 1 条日志开始检查:

  • OBSERVE xx 必须是合法且未取消的物体,执行后清除其复核标记。
  • MOVE aa 必须是合法区域,执行后机器人移动到 a;当 a=m 时安全区标记为 1,否则为 0
  • PICK xx 必须合法、未取消、未完成;夹爪必须为空;物体必须在机器人当前区域;且 grasp[x]=1。执行后 held=x, loc[x]=0
  • PLACE x a:物体和区域都必须合法;夹爪必须持有物体 x。执行后放到区域 a,若 a=m 则该物体完成。
  • ROLLBACK aa 必须是合法区域,执行后机器人回退到该区域,并按是否为 m 更新安全区标记。
  • CANCEL xx 必须合法,且不能正在被持有。执行后该物体位置设为 -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 位小数。
  • 对象编号可能非法,物体可能已取消、已完成或不在当前区域;这些分支会出现在隐藏数据里。
  • PICKMOVEPLACECANCEL 的状态更新会互相影响,请保持夹爪、位置和完成标记一致。
  • 初始 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