1 #include<stdio.h>
2 #include<math.h>
3 int x[100005],y[100005],ch[100005];
4 void sort(int l,int r)
5 {
6 int i,j,xx,yy,x1;
7 i=l; j=r;
8 xx=x[(i+j)/2]; x1=y[(i+j)/2];
9 while (i<=j)
10 {
11 while ((x[i]<xx)||(x[i]==xx&&y[i]<x1)) i++;
12 while ((xx<x[j])||(xx==x[j]&&x1<y[j])) j--;
13 if (i<=j)
14 {
15 yy=x[i]; x[i]=x[j]; x[j]=yy;
16 yy=y[i]; y[i]=y[j]; y[j]=yy;
17 i++; j--;
18 }
19 }
20 if (l<j) sort(l,j);
21 if (i<r) sort(i,r);
22 }
23 int cross(int i,int j,int k)
24 {
25 int x1,x2,y1,y2;
26 x1=x[j]-x[i]; y1=y[j]-y[i];
27 x2=x[k]-x[i]; y2=y[k]-y[i];
28 return(x1*y2-x2*y1);
29 }
30 int main()
31 {
32 int t,n,i,m,k,judge=0;
33 double sum,r;
34 while (~scanf("%d",&t))
35 while (t--)
36 {
37 scanf("%d%lf",&n,&r);
38 for (i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]);
39 sort(1,n);
40 //͹°ü,n>=3
41 m=1;
42 for (i=1;i<=n;i++)
43 {
44 while (m>=3&&cross(ch[m-2],ch[m-1],i)<=0) m--;
45 ch[m]=i; m++;
46 }
47 k=m-1;
48 for (i=n-1;i>=1;i--)
49 {
50 while (m>=k+2&&cross(ch[m-2],ch[m-1],i)<=0) m--;
51 ch[m]=i; m++;
52 }
53 m--; //mŽóÓÚµÈÓÚ3ÇÒ²»ÔÚÒ»ÌõÏßÉÏ
54 printf("%d ",m); for (i=1;i<=m;i++) printf("%d ",ch[i]);
55 sum=0.0;
56 for (i=1;i<m;i++)
57 sum+=sqrt(1.0*(x[ch[i]]-x[ch[i+1]])*(x[ch[i]]-x[ch[i+1]])+
58 1.0*(y[ch[i]]-y[ch[i+1]])*(y[ch[i]]-y[ch[i+1]]));
59 sum+=2*3.1415926*r;
60 printf("%.0lf\n",sum);
61 if (t!=0) printf("\n");
62 }
63 return(0);
64 }