#abc286h. [abc286_h]Don't Swim

[abc286_h]Don't Swim

问题描述

在一个二维平面上,有一个凸多边形CC,由NN个顶点组成,还有两个点S=(sx,sy)S=(s_x, s_y)T=(tx,ty)T=(t_x,t_y)CC的顶点按逆时针顺序排列,依次是(x1,y1),(x2,y2),(x_1,y_1),(x_2,y_2),\ldots, (xN,yN)(x_N,y_N)。保证SSTT在多边形外部。

找出从点SS到点TT的最短距离,除了沿着CC的圆周进入多边形内部以外,不得进入多边形的内部。

约束条件

  • 3N1053\leq N \leq 10^5
  • xi,yi,sx,sy,tx,ty109|x_i|,|y_i|,|s_x|,|s_y|,|t_x|,|t_y|\leq 10^9
  • (x1,y1),(x2,y2),(x_1,y_1),(x_2,y_2),\ldots, 和 (xN,yN)(x_N,y_N) 按逆时针顺序组成一个凸多边形。
  • CC 的任意三个顶点不共线。
  • SSTTCC 的外部且不在 CC 的圆周上。
  • 输入中所有的值都是整数。

输入

输入以以下格式从标准输入给出:

NN x1x_1 y1y_1 x2x_2 y2y_2 \vdots xNx_N yNy_N sxs_x sys_y txt_x tyt_y

输出

输出答案。

如果你的输出与真值的绝对误差或相对误差不超过 10610^{-6},则视为正确。


示例输入 1

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

示例输出 1

5.65028153987288474496

以下图示展示了一种最短距离的路径。

image

如果按照 (0,2)(1,3)(3,3)(5,2)(0,2) \to (1,3) \to(3,3)\to(5,2) 的顺序行进,从点 SS 到点 TT 的路径长度为 5.650281...5.650281...。我们可以证明这是最小值。请注意,你可能会进入多边形的圆周。

请注意,如果你的输出与真值的绝对误差或相对误差不超过 10610^{-6},则视为正确。例如,类似 5.650287 的输出也被视为正确。


示例输入 2

3
0 0
2 0
1 10
3 7
10 3

示例输出 2

8.06225774829854965279