
1 /* 2 几何+凸包逆序输出+极角排序 3 */ 4 #include<stdio.h> 5 #include<string.h> 6 #include<stdlib.h> 7 #include<math.h> 8 #include<algorithm> 9 using namespace std; 10 const int maxn = 55; 11 const double eps = 1e-8; 12 struct Point{ 13 double x,y; 14 }; 15 Point point[ maxn ]; 16 17 double xmult( Point sp,Point ep,Point op ){ 18 return ( sp.x-op.x )*( ep.y-op.y )-( sp.y-op.y )*( ep.x-op.x ); 19 } 20 21 int sig( double d ){ 22 if( d>eps ) return 1; 23 if( d<-eps ) return -1; 24 return 0; 25 } 26 27 double dist( Point a,Point b ){ 28 double sum = ( a.x-b.x )*( a.x-b.x )+( a.y-b.y )*( a.y-b.y ); 29 return sqrt( sum ); 30 } 31 32 int cmp( Point a, Point b ){ 33 return sig( xmult(a,b,point[0]) )>0; 34 } 35 36 int main(){ 37 int n = 0; 38 while( scanf("%lf%lf",&point[ n ].x,&point[ n ].y )!=EOF ) 39 n++; 40 sort( point+1,point+n,cmp ); 41 for( int i=0;i<n;i++ ){ 42 printf("(%.0lf,%.0lf)\n",point[ i ].x,point[ i ].y); 43 } 44 return 0; 45 }