Cod sursa(job #246045)
program trapez;
type casuta=record
x,y:int64;
end;
vector=array[1..1000000] of casuta;
var a:array[1..100000] of casuta;
b:vector;
n,i,j,k,trap,caz:int64;
oX,oY:int64;
f,g:text;
aux:casuta;
ok:boolean;
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
k:=k+1;
if oY<0 then begin b[k].y:=-1*oY; b[k].x:=-1*oX; end else
begin
b[k].y:=oY;
b[k].x:=oX;
end;
end;
end;
repeat
ok:=true;
for i:=1 to k-1 do
if b[i].y*b[i+1].x>b[i].x*b[i+1].y then
begin
aux:=b[i];
b[i]:=b[i+1];
b[i+1]:=aux;
ok:=false;
end;
until ok;
i:=1;
j:=1;
while i<k do
begin
if b[i].y*b[i+1].x=b[i].x*b[i+1].y then
while (b[i].y*b[i+1].x=b[i].x*b[i+1].y) and (i<k) do
begin
j:=j+1;
i:=i+1;
end;
if j<>1 then trap:=trap+(j*(j-1) div 2);
j:=1;
i:=i+1;
end;
write(g,trap);
close(f);
close(g);
end.