Cod sursa(job #113298)

Utilizator ionescu88alex ionescu ionescu88 Data 9 decembrie 2007 16:51:35
Problema Trapez Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.63 kb
type punct=record
      x,y:longint;
     end;
var fi,fo:text;
    n,i,j:longint;
    coord:array[1..1010]of punct;
    ct:longint;
    valori:array[1..1000000]of extended;
function comb(n:integer):longint;
begin
  comb:=n*(n-1) shr 1;
end;
procedure parc;
var i,j,ct2,cont,rez:longint;
begin
    ct2:=1; cont:=0;
    valori[ct+1]:=-2000000000;
    for i:=2 to ct+1 do
      if valori[i]=valori[i-1] then inc(ct2)
        else
          begin
            rez:=comb(ct2);
            inc(cont,rez);
            ct2:=1;
          end;
    writeln(fo,cont);
end;
function part(st,dr:longint):longint;
var i,j,s:longint;
    aux:extended;
begin
  i:=st; j:=dr; s:=-1;
  while i<j do
    begin
      if valori[i]>valori[j] then
        begin
          aux:=valori[i];
          valori[i]:=valori[j];
          valori[j]:=aux;
          s:=-s;
        end;
      if s=1 then inc(i)
             else dec(j);
    end;
  part:=i;
end;
procedure qsort(st,dr:longint);
var p:longint;
begin
  if st<dr then
    begin
      p:=part(st,dr);
      qsort(st,p-1);
      qsort(p+1,dr);
    end;
end;
procedure solv_panta;
var i,j:longint;
begin
  ct:=0;
  for i:=1 to n-1 do
    for j:=i+1 to n do
       begin
         inc(ct);
         if (coord[i].y-coord[j].y=0) then valori[ct]:=2000000000
            else valori[ct]:=(coord[i].x-coord[j].x)/(coord[i].y-coord[j].y);
       end;
end;
begin
  assign(fi,'trapez.in'); reset(fi);
  assign(fo,'trapez.out'); rewrite(fo);
  read(fi,n);
  for i:=1 to n do
    read(fi,coord[i].x,coord[i].y);
  solv_panta;
  qsort(1,ct);
  parc;
  close(fi);
  close(fo);
end.