SP205 ICERINK - Icerink

题目描述

在 Byteland 的最大溜冰场上举行了一场滑冰比赛。这个溜冰场是一个边长为 $10000$ 的正方形。选手从裁判指定的起点出发,目标是滑到裁判指定的终点。起点和终点位置不同。滑行方向必须平行于溜冰场的边界。溜冰场上有一些障碍物,每个障碍物由一个棱柱构成,其底面为一个多边形,边缘平行于溜冰场的边,并且相邻的边总是垂直。不同的障碍物之间不会重叠。滑行只会在首次遇到与滑行方向垂直的障碍物墙壁时停下。换句话说,选手只能在撞上墙壁或到达终点时停下。滑出溜冰场的话,选手会被取消资格。选手可以沿着障碍物的墙壁边缘滑行。 判断选手是否可以从起点按规则滑行到终点,如果可以,计算最少需要多少次滑行。 ### 任务 请编写一个程序,其功能为: - 从标准输入中读取关于溜冰场、障碍物以及起点和终点坐标的描述。 - 判断选手从起点出发能否按规则滑行到终点,如果可以,计算到达终点所需的最少滑行次数。 - 将结果写入标准输出。

输入格式

第一行输入一个整数 $t$,表示测试用例的数量。之后是 $t$ 个测试用例,每个用例之间用空行分隔。我们使用坐标系来描述溜冰场上的位置。溜冰场是一个顶点为 $(0,0)$, $(10000,0)$, $(10000,10000)$, $(0,10000)$ 的正方形。在每个测试用例中,第一行包含两个整数 $z_1$ 和 $z_2$,$0 \leq z_1, z_2 \leq 10000$,表示起点的坐标 $(z_1, z_2)$。第二行包含两个整数 $t_1$ 和 $t_2$,$0 \leq t_1, t_2 \leq 10000$,表示终点的坐标 $(t_1, t_2)$。第三行是一个整数 $s$,$1 \leq s \leq 2500$,即障碍物的数量。接下来的行描述 $s$ 个障碍物。每个障碍物的描述从一行开始,这行包含一个正整数 $r$,它是障碍物底面边的数量。接下来的 $r$ 行中,每行包含两个整数 $x$ 和 $y$,表示障碍物底面顶点的坐标,按顺时针顺序给出(即沿此方向绕障碍物行走时,障碍物位于左侧)。所有障碍物的边数加起来不超过 10000。

输出格式

对每个测试用例,如果无法从起点滑到终点,输出 `NO`;否则,输出到达终点所需的最少滑行次数。 **本翻译由 AI 自动生成**