时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld
题目描述

是一个喜欢动脑的孩子,在他的生日这天,他收到了一份神奇的礼物:三枚硬币以及一封信。
信中描述了这样一个情景:任取两枚硬币固定在二维平面上,并让它们恰好相切,用第三枚硬币沿着它们形成的边界进行翻滚,即时刻保证与至少一枚已固定的硬币相切。这样这枚运动的硬币在翻滚了一定的圈数之后,一定会回到原点,即恰好绕了一周。(如此一来,便会出现三种情况:固定

,让

运动;固定

,让

运动;固定

,让

运动)
信里还说,如果
能求出运动的硬币翻滚的圈数最少是多少,那么他将会收获一份更大的礼物。
非常想要这份大礼,但是又不知道如何解决这个难题,因此他向你求助问题的答案。
输入描述:
第一行一个整数
&preview=true)
,表示测试用例的数量。
对于每组测试用例,输入一行三个整数
&preview=true)
,分别表示三枚硬币的半径。
输出描述:
对于每组测试用例,输出一行一个实数表示答案。只要你的答案与标准答案的绝对或相对误差不超过
则被认为正确。在形式上,若你的答案是
,标准答案是
,那么当且仅当
时,你的答案才会被判定为正确。
示例1
输出
复制
1.841387941165222
2.666666666666667
说明
在第一组测试用例中,固定前两枚硬币,用第三枚硬币绕其边界翻滚一周,圈数最少,约为
。在第二组测试用例中,固定其中任意两枚硬币,用第三枚硬币绕其边界翻滚一周,圈数最少,约为
。