#include #include #include int num,top,ii; struct node { int x; int y; }a[105],mis[50005]; struct { node b[25]; int to; }an[25]; int cmp(const void *c,const void *d) { int ans; struct node *p1=(node *)c; struct node *p2=(node *)d; ans=(p1->x-a[0].x)*(p2->y-a[0].y)-(p2->x-a[0].x)*(p1->y-a[0].y); if (ans>0) return -1; else if (ans<0) return 1; else { if (abs(a[0].x-p1->x)x)) return 1; return -1; } } int find( int p2,int p1,int p0) { return (an[ii].b[p1].x-an[ii].b[p0].x)*(a[p2].y-an[ii].b[p0].y)-(a[p2].x-an[ii].b[p0].x)*(an[ii].b[p1].y-an[ii].b[p0].y); } int find2( node p2,node p1,node p0) { return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); } void Graham(int n) { int i; a[n]=a[num]; a[num]=a[0]; a[0]=a[n]; qsort(a+1,n-1,sizeof(a[0]),cmp); an[ii].b[0]=a[0]; an[ii].b[1]=a[1]; top=1; for (i=2;i