Cod sursa(job #286913)

Utilizator MihaiBunBunget Mihai MihaiBun Data 24 martie 2009 12:12:09
Problema Economie Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.54 kb
program aliu;
type vector=array[1..1000] of longint;
var f:text;
    a,b:vector; 
    v:array[1..50000] of 0..1;
    i,j,n,nr,k,x,kk,max:longint;

procedure poz(li,ls:longint;var kk:longint;var a:vector);
var p,q,c,p1,q1:longint;
begin
   p1:=0;
   q1:=-1;
   p:=li;
   q:=ls;
   while p<q do
     begin
       if a[p]>a[q]  then begin
                             c:=a[p];
                             a[p]:=a[q];
                             a[q]:=c;
                             c:=p1;
                             p1:=-q1;
                             q1:=-c
                           end;
       p:=p+p1;
       q:=q+q1;
     end;
    kk:=p;
  end;

  procedure quick(li,ls:longint);
  begin
    if li<ls then begin
                     poz(li,ls,kk,a);
                     quick(li,kk-1);
                     quick(kk+1,ls)
                  end;
  end;


begin
  assign(f,'economie.in');
  reset(f);
  readln(f,n);
  max:=0;
  for i:=1 to n do begin
                    readln(f,a[i]);
                    if a[i]>max then max:=a[i]
                   end;
  close(f);
  assign(f,'economie.out');
  rewrite(f);
  quick(1,n);
  nr:=0;
  for i:=1 to n do
    if v[a[i]]=0 then begin
                        nr:=nr+1;
                        b[nr]:=a[i];
                        v[a[i]]:=1;
                        for k:=1 to max do
                          if v[k]=1 then if (k+a[i])<=max then v[k+a[i]]:=1;
                      end;
  writeln(f,nr);
  for i:=1 to nr do writeln(f,b[i]);
  close(f);
end.