Cod sursa(job #286847)

Utilizator MihaiBunBunget Mihai MihaiBun Data 24 martie 2009 11:25:09
Problema Economie Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.91 kb
program aliu;
type vector=array[1..1000] of longint;
var f:text;
    a,b:vector;
    e:boolean;
    v:array[1..1000] of 0..1;
    i,j,n,nr,k,x,kk: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);
  for i:=1 to n do readln(f,a[i]);
  close(f);
  assign(f,'economie.out');
  rewrite(f);
  quick(1,n);
  nr:=0;
  for i:=1 to n do
    if v[i]=0 then begin
                        nr:=nr+1;
                        b[nr]:=a[i];
                        for j:=i+1 to n do
                          if (a[j] mod a[i])=0 then v[j]:=1;
                        e:=false;
                        repeat
                          for j:=1 to n do
                            for k:=1 to n do
                              if (v[j]=1)and(v[k]=1) then if (j+k<=n) then begin
                                                                            v[j+k]:=1;
                                                                            e:=true
                                                                           end
                       until not e;
                      end;
  writeln(f,nr);
  for i:=1 to nr do writeln(f,b[i]);
  close(f);
end.