|
|
вернуться в форумОбщий форум1185 (Wall) : why do my program get wa? please have a look #include <stdio.h> #include <math.h> struct co { int x,y; }; double dist(co a, co b) { return sqrt((a.x-b.x)*(double)(a.x-b.x)+(a.y-b.y)*(double)(a.y-b.y)); } int cw(co a, co b, co c) { return (c.x-a.x)*(double)(b.y-a.y)>(b.x-a.x)*(double)(c.y-a.y); } void main() { #ifndef ONLINE_JUDGE freopen("1185.in","r",stdin); freopen("1185.out","w",stdout); #endif const int maxsize=1000; co p[maxsize]; int size; int i,j,k; int s[maxsize*2]; int ssize; int p1,p2,c; double length; int r; scanf("%d%d",&size,&r); length=2*(2*acos(0))*r; for (i=0; i<size; i++) scanf("%d%d",&(p[i].x),&(p[i].y)); for (i=1,k=0; i<size; i++) if ((p[i].x<p[k].x)||((p[i].x==p[k].x)&&(p[i].y<p[k].y))) k=i; ssize=0; for (i=0; i<=size; i++){ s[ssize++]=(k+i)%size; for (j=0; ssize>=3 && !j; ) { c=s[--ssize]; p1=s[--ssize]; p2=s[--ssize]; if (j=cw(p[p2],p[p1],p[c])) { s[ssize++]=p2; s[ssize++]=p1; s[ssize++]=c; } else { s[ssize++]=p2; s[ssize++]=c; } } } for (i=1; i<ssize; i++) length+=dist(p[s[i-1]], p[s[i]]); printf("%.0lf",length); } |
|
|