Pagini recente » Cod sursa (job #2017454) | Cod sursa (job #1837590) | Cod sursa (job #1444140) | Istoria paginii utilizator/soso | Cod sursa (job #227427)
Cod sursa(job #227427)
program pascal;
type vector=array[1..800] of integer;
var f,g:text;
v:vector;
n,i,j,m,t,r,k:integer; nr:longint;
procedure poz(li,ls:integer; var k:integer; var v:vector);
var i,j,c,i1,j1:integer;
begin
i1:=0;
j1:=-1;
i:=li;
j:=ls;
while i<j do
begin
if v[i]>v[j] then
begin
c:=v[j];
v[j]:=v[i];
v[i]:=c;
c:=i1;
i1:=-j1;
j1:=-c;
end;
i:=i+i1;
j:=j+j1;
end;
k:=i;
end;
procedure quick(li,ls:integer);
begin
if li<ls then
begin
poz(li,ls,k,v);
quick(li,k-1);
quick(k+1,ls);
end;
end;
{ procedure quicksort(s,d:integer);
var a,b,aux,ia:integer;
begin
a:=s; b:=d;
repeat
while v[a]<v[b] do b:=b-1;
aux:=v[a];
v[a]:=v[b];
v[b]:=aux;
ia:=1; a:=a+1;
if a<b then
begin
while v[a]<v[b] do a:=a+1;
if a<>b then
begin
aux:=v[a];
v[a]:=v[b];
v[b]:=aux;
ia:=0;
b:=b-1;
end;
end;
until a>=b;
if s<a-ia then quicksort(s,a-ia);
if a-ia+1<d then quicksort(a-ia+1,d);
end;}
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);
for i:=1 to n do
begin
read(f,v[i]);
end;
quick(1,n);
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.