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 |
求助,不管怎么调都过不了。var x,y,q:array[0..1101] of longint; n,i,k,top,l,t:longint; ans:real; function cross(x1,y1,x2,y2,x3,y3:longint):longint; begin cross:=(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1); end; function dis(x1,y1,x2,y2:longint):real; begin dis:=sqrt(sqr(x2-x1)+sqr(y2-y1)); end; procedure sort; var i,j:longint; begin for i:=2 to n-1 do begin k:=i; for j:=i+1 to n do if (cross(x[1],y[1],x[j],y[j],x[k],y[k])>0) or (cross(x[1],y[1],x[j],y[j],x[k],y[k])=0) and (dis(x[1],y[1],x[j],y[j])<dis(x[1],y[1],x[k],y[k])) then k:=j; t:=x[i];x[i]:=x[k];x[k]:=t; t:=y[i];y[i]:=y[k];y[k]:=t; end; end; begin readln(n,l);x[0]:=1<<30;y[0]:=x[0]; for i:=1 to n do begin readln(x[i],y[i]); if (y[i]<y[k]) or (y[i]=y[k]) and (x[i]<x[k]) then k:=i; end; t:=x[1];x[1]:=x[k];x[k]:=t; t:=y[1];y[1]:=y[k];y[k]:=t; sort; q[1]:=1;q[2]:=2;q[3]:=3;top:=3; for i:=4 to n do begin while (cross(x[q[top-1]],y[q[top-1]],x[i],y[i],x[q[top]],y[q[top]])>=0) do dec(top); inc(top);q[top]:=i; end; q[0]:=q[top]; for i:=1 to top do ans:=ans+dis(x[q[i]],y[q[i]],x[q[i-1]],y[q[i-1]]); writeln(round(ans+2*pi*l)); end. 如果有两个点是同一个坐标会不会有问题? Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator