Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:一般是你程序的问题, 贴个代码看看In Reply To:Re:一般是你程序的问题, 贴个代码看看 Posted by:dosxp at 2008-09-01 21:59:09 顺便也看看我的代码吧!也是c++就ac换g++就wa!感觉我的数组没问题啊! #include<stdio.h> #include<stdlib.h> #include<math.h> struct point { int x,y; }; struct point P[1005]; struct point result[1005]; int n,cur; double dis(point a,point b) { double temp; temp=(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); temp = sqrt(temp); return temp; } int mul(point a,point b,point c) { return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x); } int cmp(const void *a,const void *b) { struct point *aa = (struct point *)a; struct point *bb = (struct point *)b; int t; t = mul(P[0],*aa,*bb); if (t < 0) return 1; else if (t == 0&&(dis(P[0],*aa)<dis(P[0],*bb))) return 1; else return -1; } void tubao(int n) { int i; result[0] = P[0]; result[1] = P[1]; result[2] = P[2]; cur = 2; for (i = 3;i <= n;i++) { while (mul(result[cur-1],result[cur],P[i]) < 0 && cur >= 2) { cur--; } cur++; result[cur] = P[i]; } } int main() { int i,l,px,py,p; struct point temp; double sum; while (scanf ("%d%d",&n,&l)!= EOF) { for (i = 0; i< n;i++) { scanf ("%d%d",&P[i].x,&P[i].y); if (i == 0||px<P[i].x) { px = P[i].x; py = P[i].y; p = i; } else if (px == P[i].x&&py<P[i].y) { px = P[i].x; py = P[i].y; p = i; } } temp = P[0]; P[0] = P[p]; P[p] = temp; qsort(P+1,n-1,sizeof(P[0]),cmp); P[n] = P[0]; tubao(n); sum = 0; for (i = 0; i< cur;i++) sum+=dis(result[i],result[i+1]); sum+=2*3.1415926*l; printf ("%.0lf\n",sum); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator