Cod sursa(job #245519)
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.