Code For PKU 3447
//by phoeagon
type
shape=packed record
n:longint;
sig:char;
ax,ay,bx,by:array[0..30]of extended;
end;
var
dt:array[0..30]of shape;
ct,top:longint;
mk:array[0..30]of char;
procedure dealstr(var q:string);
var
i:longint;
begin
i:=1;
while q[i]=' 'do
inc(i);
delete(q,1,i-1);
end;
procedure gtpt(var x,y:extended);
var
i,b:longint;
u:string;
t:char;
begin
read(t);
u:='';
repeat
u:=u+t;
read(t);
until eoln or (t=#32);
dealstr(u);
delete(u,1,1);
if not eoln then delete(u,length(u),1);
for i:=1 to length(u)do
if u[i]=','then
begin
val(copy(u,1,i-1),x,b);if b<>0 then write(copy(u,1,i-1));
val(copy(u,i+1,length(u)-i),y,b);if b<>0 then write(copy(u,i+1,length(u)-i));
break;
end;
end;
procedure square(var q:shape);
var
i:longint;
mdx,mdy:extended;
x:char;
begin
//read(x);
q.n:=4;
gtpt ( q.ax[1] , q.ay[1] );
gtpt ( q.ax[3] , q.ay[3] );
mdx:=(q.ax[1]+q.ax[3])/2;
mdy:=(q.ay[1]+q.ay[3])/2;
q.ax[2] := mdx + ( q.ay[1]-mdy );
q.ay[2] := mdy + ( mdx-q.ax[1] );
q.ax[4] := mdx + ( q.ay[3]-mdy );
q.ay[4] := mdy + ( mdx-q.ax[3] );
q.bx[1]:=q.ax[2]; q.bx[2]:=q.ax[3]; q.bx[3]:=q.ax[4]; q.bx[4]:=q.ax[1];
q.by[1]:=q.ay[2]; q.by[2]:=q.ay[3]; q.by[3]:=q.ay[4]; q.by[4]:=q.ay[1];
readln;
end;
function dis(const x1,y1,x2,y2:extended):extended;
begin
exit( sqrt(sqr(x1-x2)+sqr(y1-y2)) );
end;
procedure rect(var q:shape);
var
i,j,i1,j1:longint;
mdx,mdy,fur,tp:extended;
x:char;
//z:shape;
begin
//read(x);
q.n:=4;
//fillchar(q,sizeof(q),0);
gtpt(q.ax[1],q.ay[1]);
gtpt(q.ax[2],q.ay[2]);
gtpt(q.ax[3],q.ay[3]);
fur:=0;
mdx:=(q.ax[1]+q.ax[3])/2;
mdy:=(q.ay[1]+q.ay[3])/2;
q.ax[4] := 2*mdx-q.ax[2];
q.ay[4] := 2*mdy-q.ay[2];
q.bx[1]:=q.ax[2]; q.bx[2]:=q.ax[3]; q.bx[3]:=q.ax[4]; q.bx[4]:=q.ax[1];
q.by[1]:=q.ay[2]; q.by[2]:=q.ay[3]; q.by[3]:=q.ay[4]; q.by[4]:=q.ay[1];
readln;
end;
procedure triangle(var q:shape);
var
i:longint;
t:char;
begin
//read(t);
q.n:=3;
for i:=1 to 3 do
gtpt(q.ax[i],q.ay[i]);
for i:=2 to 3 do
begin
q.bx[i]:=q.ax[i-1];
q.by[i]:=q.ay[i-1];
end;
q.bx[1]:=q.ax[3];
q.by[1]:=q.ay[3];
readln;
end;
procedure line(var q:shape);
var
i:longint;
t:char;
begin
//read(t);
q.n:=1;
gtpt(q.ax[1],q.ay[1]);
gtpt(q.bx[1],q.by[1]);
readln;
end;
procedure polygon(var q:shape);
var
i:longint; x:char;
begin
reaD(q.n); read(x);
for i:=1 to q.n do
gtpt(q.ax[i],q.ay[i]);
for i:=2 to q.n do
begin
q.bx[i]:=q.ax[i-1];
q.by[i]:=q.ay[i-1];
end;
q.bx[1]:=q.ax[q.n];
q.by[1]:=q.ay[q.n];
readln;
end;
function outproduct(const x1,y1,x2,y2:extended):extended;
begin
exit( x1*y2-x2*y1);
end;
function cross(const x1,y1,x2,y2,x3,y3,x4,y4:extended):boolean;
begin
if (outproduct( x1-x2, y1-y2, x1-x4, y1-y4 )*
outproduct(x1-x2, y1-y2, x1-x3 , y1-y3 ) <=0)and
(outproduct (x3-x4, y3-y4, x3 |