圆凸包
题号:NC201836
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

给出 个点求他们的凸包是一个经典问题,所以出了一道稍微难一点的题。
给出平面上 个圆,第 个圆的圆心是 (x_i,y_i),半径是 r_i。定义这 个点的凸包为所有满足以下条件的点 形成的区域:存在点 和常数 满足 A,B 都在某个圆的内部(所在的圆可以不同)且 。换句话说,这 个点的凸包等于这 个圆内部的所有点形成的凸包。
现在给出这 个圆,试求这 个圆形成的凸包的周长。

输入描述:

第一行输入一个整数  表示数据组数。
每组数据的第一行是一个整数 表示圆的个数。
接下来 n 行每行三个整数 ,描述了一个圆。

输出描述:

对每组数据输出一行一个实数,表示周长。你的答案会被视为正确当且仅当相对误差或者绝对误差不超过 
示例1

输入

复制
3
2
0 0 1
1 0 1
4
0 0 1
0 1 1
1 0 1
1 1 1
5
0 0 1
2 2 1
0 2 1
2 0 1
1 1 2

输出

复制
8.28318530718
10.28318530718
14.28318530718