Cod sursa(job #245519)

Utilizator qSortMorariu Razvan qSort Data 18 ianuarie 2009 11:36:28
Problema Trapez Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.28 kb
program trapez;
type casuta=record
						x,y:int64;
						end;
		vector=array[1..6000] of extended;
var a:array[1..1000] of casuta;
		b:vector;
		n,i,j,k,trap:longint;
		oX,oY:int64;
		f,g:text;
		m:double;
procedure qsort(var v:vector; p,l:longint);
var st,dr:longint;
		aux,m:extended;
begin
st:=p;
dr:=l;
m:=v[(p+l) div 2];
repeat
	while v[st]<m do st:=st+1;
	while v[dr]>m do dr:=dr-1;
		if st<=dr then begin
										aux:=v[st];
										v[st]:=v[dr];
										v[dr]:=aux;
										st:=st+1;
										dr:=dr-1;
										end;
until st>dr;
if p<dr then qsort(v,p,dr);
if st>l then qsort(v,st,l);

end;




begin
assign(f,'trapez.in'); reset(f);
assign(g,'trapez.out'); rewrite(g);
read(f,n);
k:=0;
for i:=1 to n do
	read(f,a[i].x,a[i].y);
for i:=1 to n-1 do
	for j:=i+1 to n do
		begin
		oX:=a[i].x-a[j].x;
		oY:=a[i].y-a[j].y;
		if (oX<>0) then  begin
											if oY=0 then m:=0
											else
											m:=oY/oX;
											k:=k+1;
											b[k]:=m;
											end;
		end;
qsort(b,1,k);
i:=1;
j:=1;
while i<=k-1 do
	begin
	 if b[i]=b[i+1] then
				while b[i]=b[i+1]  do
					begin
					j:=j+1;
					i:=i+1;
					end;
		 if j>1 then trap:=(j*(j-1)) div 2;
		i:=i+1;
		j:=1;
	end;
write(g,trap);
close(f);
close(g);
end.