Cod sursa(job #156276)

Utilizator Marinescu_DanyelMarinescu George Marinescu_Danyel Data 12 martie 2008 14:16:34
Problema Economie Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.36 kb
Program economie_cu_monezi;

     type vector=array[1..1000]of word;
          vec=array[1..50000] of boolean;

     var v,m:vector;
         z:vec;
         i,j,n,k,min,x:word;
         f,g:text;
         ok:boolean;


procedure sortare(var v:vector);
   var i,j,aux,k:integer;
 begin
  for i:=1 to n-1 do
    begin
       k:=i;
     for j:=i+1 to n do
      if v[j]<v[k] then
       k:=j;
        if k>i then
         begin
          aux:=v[i];
          v[i]:=v[k];
          v[k]:=aux;
         end;
        end;
       end;


procedure incercare;
  var ii:word;
 begin
  ii:=2;
  Repeat
   z[m[min]]:=true;
    For i:=1 to (v[n]-m[min]) do
    If z[i] then
         z[i+m[min]]:=true;
    While (ii<=n)and(z[v[ii]])do
         ii:=ii+1;
    If ii<=n then
      begin
       min:=min+1;
       m[min]:=v[ii];
      end;
    Until ii>n;
    end;

begin

 assign(f,'economie.in');
 reset(f);
 assign(g,'economie.out');
 rewrite(g);
 read(f,n);
 For i:=1 to n do
  read(f,v[i]);
  sortare(v);
 If v[1]=1 then
    begin
     writeln(g,1);
     write(g,1);
     end
    else
     begin
    min:=1;
    m[1]:=v[1];
    incercare;
    writeln(g,min);
    for i:=1 to min do
      if i<>min then
       writeln(g,m[i])
       else
       write(g,m[i]);
     end;
     close(f);
     close(g);
     end.