Cod sursa(job #184067)

Utilizator mianaMiana Arisanu miana Data 22 aprilie 2008 23:03:34
Problema Economie Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.54 kb
program economii;
var v, rez : array[1..1001] of longint;
    uz : array[1..50000] of boolean;
    i, j, N, nr : longint;
    f, g : text;


procedure sort(p,q:longint);
var st, dr, m, aux:longint;
begin
        st := p;
        dr := q;
        m := v[(st + dr) div 2];
        while (st < dr) do
        begin
                while (v[st] < m) do inc(st);
                while (v[dr] > m) do dec(dr);
                if (st<=dr) then
                begin
                        aux := v[st];
                        v[st] := v[dr];
                        v[dr] := aux;
                        inc(st);
                        dec(dr);
                end;
        end;
        if (st < q) then sort(st,q);
        if (dr > p) then sort(p,dr);

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,v[i]);
        sort(1,N);
        for i:=1 to N do
        begin
                if (not(uz[v[i]])) then
                begin
                        inc(nr);
                        rez[nr] := v[i];
                        uz[v[i]] := true;
                        for j :=1 to (v[N] - v[i]) do
                        if (uz[j]) then
                                uz[j+v[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.