C1657 [Wannafly冬令营2018Day3]集合

内存限制:256 MB 时间限制:3000 ms

题目描述

最近放假了,可怜计划和她的好朋友 Sylvia 去公园玩。

我们可以把地图抽象成一个二维平面,可怜最开始的位置是点 $x$,Sylvia 最开始的位置是点 $y$,公园是一个以点 $o$ 为圆心,半径为 $r$ 的圆 $O$。

因为进入公园要买票,因此她们约好了先在不进入公园的情况下,在公园的边界上集合,然后在一起买票进公园。她们想要选择一个最优的集合地点使得双方要走的距离长度和最小。

换句话说,令 $d(s,t)$ 为在平面上,不经过圆 $O$ 的内部,从 $s$ 走到 $t$ 的最短距离,可怜希望在圆 $O$ 的边界上找到点 $m$,使得 $d(x,m)+d(y,m)$ 尽可能地小。

输入格式

输入第一行一个整数 $t(1 \leq t \leq 10^6)$ 表示数据组数。

对于每组数据,输入一行 $7$ 个整数,分别是 $x$ 的横纵坐标,$y$ 的横纵坐标,$o$ 的横纵坐标和半径 $r(1 \leq r \leq 10^3)$,其中所有坐标的绝对值不超过 $10^3$。

数据保证 $x$ 和 $y$ 都不在圆 $O$ 的内部,即 $x,y$ 和 $o$ 的欧几里得距离都大于等于 $r$。

输出

对于每组数据,输出一行一个整数,表示最小的总距离,保留三位小数。

输入保证每组数据答案的第四位小数都不是 $4$ 或者 $5$。

样例

样例输入 1

3 0 1 2 0 1 0 1 0 0 2 0 3 0 1 0 0 2 0 1 3 1

样例输出 1

2.571 2.000 4.472

提示