问题
鹰狩是一种使用猛禽进行狩猎的方式。一天,三个鹰狩人(负责鹰狩的人)决定举行下一次比赛。
在二维平面上有N个检查点,第ith个检查点存在于坐标为(xi,yi)的位置上。三位鹰狩人位于坐标分别为(xa,ya),(xb,yb),(xc,yc)的位置上。每个鹰狩人都有一只猛禽。比赛开始时,这三只猛禽会开始移动。比赛的目的是让每只猛禽至少通过所有的检查点,并且使三只猛禽的移动距离之和最小化。在这种情况下,距离指的是欧几里得距离。两个点(xs,ys)和(xt,yt)之间的距离是sqrt(xs−xt)2+(ys−yt)2。
可以以任意顺序通过检查点。对于一只猛禽,允许它不经过任何检查点或者经过所有的检查点。同一个检查点也可以通过多次。另外,假设每只猛禽可以选择最优的移动方式。
将给出所有检查点和三个鹰狩人的坐标。请找出三只猛禽移动距离之和的最小值。
输入
输入将通过标准输入以以下格式给出
N
x1 y1
x2 y2
:
xN yN
xa ya
xb yb
xc yc
- 第一行给出N(1≤N≤18)。
- 从第二行开始,有N行附加行,每行给出一个检查点的坐标。对于第ith行,以空格分隔给出整数xi(−10,000≤xi≤10,000)、yi(−10,000≤yi≤10,000)。
- 第(N+2)行,以空格分隔给出xa(−10,000≤xa≤10,000)、ya(−10,000≤ya≤10,000)。
- 第(N+3)行,以空格分隔给出xb(−10,000≤xb≤10,000)、yb(−10,000≤yb≤10,000)。
- 第(N+4)行,以空格分隔给出xc(−10,000≤xc≤10,000)、yc(−10,000≤yc≤10,000)。
此外,所有的坐标都不相同。
换句话说,如果ineqj,那么(xi,yi)=(xj,yj)。
此外,对于每个i(1≤i≤N),(xi,yi)=(xa,ya),(xi,yi)=(xb,yb)和(xi,yi)=(xc,yc)成立。此外,(xa,ya)=(xb,yb),(xb,yb)=(xc,yc)和(xc,yc)=(xa,ya)成立。
输出
输出通过至少一只猛禽通过所有检查点时,三只猛禽移动距离之和的最小值。
如果绝对误差或相对误差小于等于10−6,则输出是可接受的。
在输出结束时打印一个换行符。
输入示例 1
3
1 1
102 98
197 -197
0 0
100 100
200 -200
输出示例 1
8.485281374239
- 如果从(xa,ya)开始的鸟通过第一个检查点,移动距离将为sqrt2。
- 如果从(xb,yb)开始的鸟通过第二个检查点,移动距离将为2sqrt2。
- 如果从(xc,yc)开始的鸟通过第三个检查点,移动距离将为3sqrt2。
因此,通过移动6sqrt2可以至少通过所有的检查点一次。
输入示例 2
3
1 3
2 1
0 -2
0 0
-500 0
0 1000
输出示例 2
7.841619252964
如果从(xa,ya)开始的鸟经过第三个检查点,然后经过第二个检查点,再经过第一个检查点,总的移动距离将为2+sqrt13+sqrt5。
输入示例 3
6
3 7
1 10
-2 -5
-3 4
0 2
6 6
-3 9
0 4
1 1
输出示例 3
22.585258012904