Cod sursa(job #227420)

Utilizator FllorynMitu Florin Danut Flloryn Data 4 decembrie 2008 16:00:17
Problema Numarare triunghiuri Scor 25
Compilator fpc Status done
Runda Arhiva de probleme Marime 0.99 kb
program pascal;
var f,g:text;
    v:array[1..800] of integer;
    n,i,j,m,t,r,k,max,x:integer; nr:longint;
    q:array[1..30000] of 0..1;



  function caut(x,y:integer):integer;
  begin
   m:=(x+y) div 2;
   caut:=0;
   while (x<=y) and (caut=0) do
   if ((v[m]<=t) and (v[m+1]>t)) or ((v[m]<=t) and (m=n)) then  caut:=m
        else
         if (t>=v[m]) and (v[m+1]<=t) then caut:=caut(m+1,y)
                                      else caut:=caut(x,m-1);
  end;

begin
assign(f,'nrtri.in'); reset(f);
assign(g,'nrtri.out'); rewrite(g);
readln(f,n);
max:=0;
for i:=1 to n do
 begin
   read(f,x);
   if x>max then max:=x;
   q[x]:=1;
 end;

k:=0;
for i:=1 to max do
 if q[i]<>0 then
  begin
     k:=k+1;
     v[k]:=i;
  end;

nr:=0;
for i:=1 to n-1 do
   for j:=i+1 to n-1 do
     begin
     t:=v[j]+v[i];
     r:=caut(1,n); {cate numere is mai mici sau egale ca v[i]+v[j]}
     if r>=j+1 then   nr:=nr+r-(j+1)+1;
    end;

write(g,nr);
close(f);
close(g);
end.