Pagini recente » Cod sursa (job #1260187) | Cod sursa (job #858441) | Cod sursa (job #2384758) | Cod sursa (job #1103638) | Cod sursa (job #148488)
Cod sursa(job #148488)
program numarare_triunghiuri;
var f,g:text;
v:array[1..800]of 0..30000;
x,n,i,j,a,b,k,c,ca,cb:longint;
function poz(li,ls:longint):longint;
var i,j,modi,modj,m,man:longint;
begin
i:=li;
j:=ls;
modi:=0;
modj:=-1;
while (i<=j)do
begin
if (v[i]>v[j])then
begin
man:=v[i];
v[i]:=v[j];
v[j]:=man;
m:=modi;
modi:=-modj;
modj:=-m;
end;
i:=i+modi;
j:=j+modj;
end;
poz:=i;
end;
procedure quick(li,ls:longint);
begin
if (li<ls)then
begin
k:=poz(li,ls);
quick(li,k-1);
quick(k+1,ls);
end;
end;
{procedure caut(a,b:longint);
var ca,cb:longint;
begin
x:=a-b;
ca:=a;
cb:=b;
while (a<=b)do
begin
x:=x div 2;
if (v[x]<v[i]+v[j])then a:=x+1 else
if (v[x]>v[i]+v[j])then b:=x-1 else
if (v[x]=v[i]+v[j])then break;
if (b=cb)and(a=ca)then break;
ca:=a;
cb:=b;
end;
while (v[x]>v[i]+v[j])do dec(k);
end; }
begin
assign(f,'nrtri.in');
assign(g,'nrtri.out');
reset(f);
rewrite(g);
read(f,n);
for i:=1 to n do read(f,v[i]);
quick(1,n);
c:=0;
for i:=1 to n-2 do
for j:=i+1 to n-1 do
begin
a:=j+1;
b:=n;
x:=b;
ca:=a;
cb:=b;
while (a<=b)do
begin
if (a+((x-a) div 2)>n)then break;
x:=a+((x-a) div 2);
if (v[x]<v[i]+v[j])then a:=x+1 else
if (v[x]>v[i]+v[j])then b:=x-1 else
if (v[x]=v[i]+v[j])then break;
if (b=cb)and(a=ca)then break;
ca:=a;
cb:=b;
end;
while (v[x]>v[i]+v[j])do dec(x);
if (x>j)then inc(c,x-j);
end;
write(g,c);
close(f);
close(g);
end.