#P17570. PM5877 膨胀圆逃生

PM5877 膨胀圆逃生

题目描述

给定一个二维矩形区域,左下角为 (0,0)(0,0),右上角为 (xSize,ySize)(xSize,ySize)

你从点 (px,py)(px,py) 出发,目标是到达矩形的任意一条边。你可以看成平面上的一个质点,并能以每单位时间 11 单位距离的速度向任意方向移动。

区域中还有 nn 个危险点。每个危险点从时刻 00 开始以同样的速度向所有方向扩张:经过 tt 单位时间后,它形成一个半径为 tt 的圆。第 ii 个圆心为 (xi,yi)(x_i,y_i)

移动过程中不能进入任何正在扩张的圆的内部,但允许恰好位于圆周上。求到达矩形边界所需的最短时间;如果无论如何都无法逃出,输出 1-1

输入格式

第一行输入五个数 n,xSize,ySize,px,pyn,xSize,ySize,px,py,其中 nn 为危险点数量。

接下来 nn 行,第 ii 行输入两个整数 xi,yix_i,y_i,表示第 ii 个危险点的坐标。

输出格式

输出最短逃生时间。如果无法到达任何边界,输出 -1

答案的绝对误差或相对误差不超过 10910^{-9}

样例 1

输入

3 10 10 5 5
1 5
5 1
5 9

输出

5.0

解释

可以从 (5,5)(5,5) 沿直线到达 (10,5)(10,5)

样例 2

输入

4 101 10 5 5
1 5
5 1
5 9
9 5

输出

-1.0

样例 3

输入

5 4 3 0 2
0 1
0 3
1 1
1 2
1 3

输出

0.0

解释

起点已经位于矩形边界上。

样例 4

输入

3 5 6 4 2
0 6
4 0
5 2

输出

4.0

数据范围

  • 1xSize,ySize10001\le xSize,ySize\le1000
  • 0pxxSize0\le px\le xSize0pyySize0\le py\le ySize
  • 1n501\le n\le50
  • 0xixSize0\le x_i\le xSize0yiySize0\le y_i\le ySize
  • 所有危险点坐标两两不同,且均与起点不同;
  • 若某个边界点可以作为逃生点,则保证存在一个长度至少为 10610^{-6} 的边界区间,其中每个点都可以作为逃生点。