PRAVO - Tam giác vuông

Tác giả: flashmt

Ngôn ngữ: Pascal

const fi='';
      fo='';
      maxn=1505;
      delta:real=10000000000;
type ar=array[1..maxn] of longint;
     arr=array[1..maxn] of real;
var n,re,m,mm:longint;
    x,y,d,dd:ar;
    a,aa:arr;

procedure rf;
var i:longint;
begin
     readln(n);
     for i:=1 to n do readln(x[i],y[i]);
end;

procedure rotatecalc(i:longint);
var j,t,u,dem:longint;
begin
     dem:=0;
     for j:=1 to n do
     begin
          if j=i then continue;
          dem:=dem+1;
          t:=x[j]-x[i]; u:=y[j]-y[i];
          if t=0 then a[dem]:=delta
          else a[dem]:=u/t;
          if u=0 then aa[dem]:=delta
          else aa[dem]:=-t/u;
     end;
end;

procedure sort(var a:arr;l,r:longint);
var i,j:longint; x,t:real;
begin
     i:=l; j:=r; x:=a[(i+j) shr 1];
     repeat
           while a[i]<x do i:=i+1;
           while a[j]>x do j:=j-1;
           if i<=j then
           begin
                t:=a[i]; a[i]:=a[j]; a[j]:=t;
                i:=i+1; j:=j-1;
           end;
     until i>j;
     if i<r then sort(a,i,r);
     if l<j then sort(a,l,j);
end;

procedure edit(var a:arr;var d:ar;var m:longint);
var i:longint;
begin
     m:=1; d[1]:=1;
     for i:=2 to n do
         if a[i]<>a[m] then
         begin
              m:=m+1; a[m]:=a[i]; d[m]:=1;
         end
         else d[m]:=d[m]+1;
end;

procedure pr;
var i,j,k:longint;
begin
     re:=0;
     for i:=1 to n do
     begin
          rotatecalc(i);
          sort(a,1,n-1);
          sort(aa,1,n-1);
          edit(a,d,m);
          edit(aa,dd,mm);
          j:=1; k:=1;
          while (j<=m) and (k<=mm) do
          begin
               if a[j]<aa[k] then j:=j+1
               else
               begin
                    if a[j]=aa[k] then re:=re+d[j]*dd[k];
                    k:=k+1;
               end;
          end;
     end;
end;

procedure wf;
begin
     writeln(re shr 1);
end;

begin
     assign(input,fi); reset(input);
     assign(output,fo); rewrite(output);
     rf;
     pr;
     wf;
     close(input); close(output);
end.

Download