Cod sursa(job #157553)

Utilizator Marinescu_DanyelMarinescu George Marinescu_Danyel Data 13 martie 2008 09:22:14
Problema Economie Scor 10
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.25 kb
program economie;
type vector=array[1..1000] of word;
     vec=array[1..50000] of boolean;
var v,m:vector;
    z:vec;
    f,g:text;
    n,i,min,j:word;
    ok:boolean;

procedure sortare(var v:vector);
var 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 i,ii,j:word;
begin
z[m[min]]:=true;
ii:=m[min];
repeat
  for i:=v[1] to v[n] do
    if (i mod m[min]=0) or ((z[i-m[min]]=true) and (i-m[min]>0)) then
       z[i]:=true;
repeat
ii:=ii+1;
until (not z[ii]) or (ii=v[n]);
if ii<=v[n] then
   begin
   ok:=false;
   for j:=1 to n do
   if ii=v[j] then ok:=true;
   if ok and not z[ii] then
   begin
   min:=min+1;
   m[min]:=ii;
   end;
   end;
until ii>v[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 j:=1 to min do
   writeln(g,m[j]);
end;
close(f);
close(g);
end.