Cod sursa(job #286730)

Utilizator valytgjiu91stancu vlad valytgjiu91 Data 24 martie 2009 09:29:02
Problema Economie Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.17 kb
const nmax=1000;
const mmax=50000;
var f,g:text;
v:array[1..nmax]of longint;
s:array[1..mmax] of 0..2;
k,n,i,j,m:longint;
q:boolean;
procedure divid(st,dr:longint);
var aux,p,i,j:longint;
begin
i:=st;
j:=dr;
p:=v[(st+dr)div 2];
while (i<=j) do
   begin
     while (v[i]<p) do i:=i+1;
     while (v[j]>p) do j:=j-1;
     if i<=j then begin
             aux:=v[i];
             v[i]:=v[j];
             v[j]:=aux;
             i:=i+1;
             j:=j-1;
             end;
   end;
   if st<j then divid(st,j);
   if dr>i then divid(i,dr);
end;
begin
assign(f,'economie.in');
reset(f);
assign(g,'economie.out');
rewrite(g);
readln(f,n);
for i:=1 to n do
   readln(f,v[i]);
divid(1,n);
q:=true;
while q do
   begin
   q:=false;
   for i:=1 to n do
      if s[v[i]]=0 then
                     begin
                     q:=true;
                     break;
                     end;
   if q then
          begin
          k:=k+1;
          s[v[i]]:=2;
          for j:=1 to v[n]-v[i] do
             if s[j]<>0 then s[j+v[i]]:=1;
          end;
   end;
writeln(g,k);
for i:=1 to n do
    if s[v[i]]=2 then writeln(g,v[i]);
close(g);
end.