NOIXICH - Nối Xích
Tác giả: flashmt
Ngôn ngữ: Pascal
var a:array[1..20000] of integer;
n,re:integer;
procedure rf;
var i:integer;
begin
readln(n);
for i:=1 to n do
begin
while eoln do readln;
read(a[i]);
end;
end;
procedure sort(l,r:integer);
var i,j,x,y:integer;
begin
i:=l; j:=r; x:=a[(i+j) div 2];
repeat
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then
begin
y:=a[i]; a[i]:=a[j]; a[j]:=y;
inc(i); dec(j);
end;
until i>j;
if i<r then sort(i,r);
if l<j then sort(l,j);
end;
procedure pr;
var i,t:integer;
begin
sort(1,n);
re:=0; t:=n-1;
for i:=1 to n do
begin
if a[i]>=t-1 then
begin
re:=re+t-1;
if a[i]>t-1 then inc(re);
break;
end
else
begin
re:=re+a[i];
t:=t-a[i]-1;
end;
end;
end;
procedure wf;
begin
write(re);
end;
begin
rf;
pr;
wf;
end.