#AEAI04012. 安全距离约束下的轨迹选择

安全距离约束下的轨迹选择

题目描述

在调度机械臂末端移动时,规划器会提供多条折线轨迹。每条轨迹由若干控制点连接而成。请在工作空间、障碍物、安全距离和总长度限制下,选出最优可执行轨迹。

有效安全半径为 R = r_tool + d_safe。轨迹的每个控制点都要在工作空间内并远离障碍物;每一段线段也要与所有矩形障碍保持至少 R 的距离。轨迹总长度不能超过 max_len

在所有合法轨迹中,依次按总长度更短、最小安全余量更大、线段数量更少、编号更小选择。

输入格式

第一行输入工作空间矩形 xmin ymin xmax ymax

第二行输入 r_tool d_safe max_len

第三行输入矩形障碍数量 B

接下来 B 行,每行输入一个矩形 x1 y1 x2 y2

下一行输入候选轨迹数量 K

接下来每条轨迹一行,格式为:

id P x1 y1 x2 y2 ... xP yP

其中 P 为控制点数量。

输出格式

若存在合法轨迹,输出:

id length margin_min

其中 length 为轨迹总长度,margin_min 为整条轨迹的最小安全余量,均保留 6 位小数。

若没有合法轨迹,输出 NO_TRAJECTORY

判定规则

使用标准输出比较。安全余量允许等于 0;长度等于 max_len 时合法。工作空间边界也要扣除有效半径后判断。

数据范围与测试提示

  • 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
  • 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
  • 路径长度等于 max_len 时合法,安全余量允许等于 0;不要把这些边界误判为失败。
  • 工作空间边界需要扣除有效半径后判断,隐藏数据会包含刚好贴住可行边界的轨迹。
  • 无合法轨迹输出 NO_TRAJECTORY;轨迹并列时优先更短、余量更大、段数更少、编号更小。

样例

输入样例 1

-1 -1 10 10
0.2 0.1 20
1
3 3 4 4
2
1 2 0 0 2 0
2 3 0 0 0 5 5 5

输出样例 1

1 2.000000 0.700000

输入样例 2

0 0 5 5
0.5 0 10
1
2 2 3 3
1
1 2 0 0 5 5

输出样例 2

NO_TRAJECTORY