#icpc2012autumnd. [icpc2012autumn_d]Billiard
[icpc2012autumn_d]Billiard
题目描述
你有一个台球桌,其打球区域是矩形的。这个台球桌特殊之处在于没有球袋,并且打球区域完全被垫圈所包围。
你成功地制造了一个超精密的台球机器人。当你把一些球放在桌子上时,机器人会击打其中一个球。被击打的球在移动了总共10000个单位的距离后停下来。
当球与桌子的垫圈碰撞时,球会像镜子反射一样运行。当球与角落碰撞时,球会沿着原来的路径反弹。
你的任务是预测机器人击打的球会先与哪个球发生碰撞。
输入
输入是一个数据集序列。数据集的数量少于100个。每个数据集的格式如下。
...
数据集的第一行包含一个正整数 ,表示桌子上的球的数量()。下一行包含由一个空格分隔的五个整数 、、、、,其中 和 分别表示打球区域的宽度和长度 (), 表示球的半径()。机器人以向量 () 的方向击打球 ( 且 )。
接下来的 行给出球的位置。每行包含两个整数,由一个空格分隔, 表示初始状态下第 个球的中心位置 (,)。 表示打球区域的左上角位置, 表示打球区域的右下角位置。在初始状态下,可以假设球之间和球与垫圈之间没有接触。
机器人总是会先击打列表中的第一个球。可以假设给定的值没有错误。
输入的结尾由一行单独的零表示。
输出
对于每个数据集,输出机器人击打的球首先与哪个球发生碰撞的索引。当被击打的球在停止移动之前未与任何球碰撞时,输出-1
。
可以假设不会有多于一个球同时与被击打的球发生碰撞。
还保证当 改变 () 时,首先发生碰撞的球和碰撞方式不会改变。
示例输入
3
26 16 1 8 4
10 6
9 2
9 10
3
71 363 4 8 0
52 238
25 33
59 288
0
示例输出
3
-1