Cod sursa(job #184310)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 23 aprilie 2008 15:15:28
Problema Economie Scor 10
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.33 kb
type list=array[0..50001] of longint;
var a,rez:list;
    uz:array[0..50001] of boolean;
    i,j,N,nr:longint;
    f,g:text;
procedure QuickSort(var a:List; Lo, Hi: Integer);
procedure Sort(l, r: Integer);
var
  i, j, x, y: integer;
begin
  i := l; j := r; x := a[(l+r) DIV 2];
  repeat
    while a[i] < x do i := i + 1;
    while x < a[j] do j := j - 1;
    if i <= j then
    begin
      y := a[i]; a[i] := a[j]; a[j] := y;
      i := i + 1; j := j - 1;
    end;
  until i > j;
  if l < j then Sort(l, j);
  if i < r then Sort(i, r);
end;
begin {QuickSort};
  Sort(Lo,Hi);
end;
begin
assign(f,'economie.in'); reset(f);
readln(f,N);
nr:=0;
        for i:=1 to 50000 do uz[i]:=false;
        for i:=1 to N do read(f,a[i]);
        QuickSort(a,1,N);
        for i:=1 to N do
        begin
                if uz[a[i]]=false then
                begin
                        inc(nr);
                        rez[nr]:=a[i];
                        uz[a[i]]:=true;
                        for j:=1 to (a[N] - a[i]) do
                        if (uz[j]) then
                                uz[j+a[i]]:=true;
                end;


        end;
        close(f);
        assign(g,'economie.out'); rewrite(g);
        writeln(g,nr);
        for i:=1 to nr do
                writeln(g,rez[i]);
        close(g);

end.