int main() { point A[1000], B[1000]; int n, s; int T, N, L; point P; for( scanf( "%d", &T ); T--; ) { scanf( "%d%d", &N, &L ); for( int i = 0; i < N; ++i ) scanf( "%lf%lf", &A[i].x, &A[i].y ); _graham( N, A, s=0, B ); double ans = 2.0 * PI * L; for( int i = 0; i < s; ++i ) ans += hypot(B[i].x-B[(i+1)%s].x,B[i].y-B[(i+1)%s].y); printf( "%d\n", int( ans + 0.5 ) ); if( T ) puts( "" ); } }
int graham(int n,point* p,point* convex,int maxsize=1,int dir=1){ //point* temp=new point[n]; int s,i; _graham(n,p,s,temp); for (convex[0]=temp[0],n=1,i=(dir?1:(s-1));dir?(i<s):i;i+=(dir?1:-1)) if (maxsize||!zero(xmult(temp[i-1],temp[i],temp[(i+1)%s]))) convex[n++]=temp[i]; //delete []temp; return n; }