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 |
能不能多给一些测试数据哦,总是WA!#include<stdio.h> #include<math.h> struct point { int x; int y; }mypoint[1000],temp,stack[3000],x,y,z; int main() { int n,l,number,top,t,i,j; while(scanf("%d%d",&n,&l)==2) { for(i=0;i<n;i++) scanf("%d%d",&mypoint[i].x,&mypoint[i].y); for(i=0;i<n-1;i++) for(j=0;j<n-1-i;j++) if(mypoint[j].y>mypoint[j+1].y ||(mypoint[j].y==mypoint[j+1].y&&mypoint[j].x>mypoint[j+1].x)) { temp=mypoint[j]; mypoint[j]=mypoint[j+1]; mypoint[j+1]=temp; } number=1;stack[0]=mypoint[0];top=0; for(i=1;i<n;i++) { if(number==1) { number++; top++; stack[top]=mypoint[i]; continue; } z=mypoint[i]; y=stack[top]; x=stack[top-1]; t=(y.x-x.x)*(z.y-y.y)-(y.y-x.y)*(z.x-y.x); if(t>0) { number++; top++; stack[top]=mypoint[i]; continue; } top--;number--;i--; } for(i--;i>=0;i--) { for(j=0;j<=top;j++) if(stack[j].x==mypoint[i].x&&stack[j].y==mypoint[i].y) break; if(j>top||i==0) { z=mypoint[i]; y=stack[top]; x=stack[top-1]; t=(y.x-x.x)*(z.y-y.y)-(y.y-x.y)*(z.x-y.x); if(t>0) { number++; top++; stack[top]=mypoint[i]; continue; } top--;number--;i++; } } //for(i=0;i<=top;i++) printf("%d %d\n",stack[i].x,stack[i].y); double pi=3.1415926,sum=0; for(i=1;i<=top;i++) sum+=sqrt((stack[i].x-stack[i-1].x)*(stack[i].x-stack[i-1].x)+(stack[i].y-stack[i-1].y)*(stack[i].y-stack[i-1].y)); sum+=pi*2*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