Cod sursa(job #503380)

Utilizator lianaliana tucar liana Data 22 noiembrie 2010 19:48:01
Problema Economie Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.25 kb
program economie;
var f, g:text;
    n, x, rez:longint;
    v, vrez:array[0..1000] of longint;
    a:array[0..50000] of boolean;

procedure citire;
var i:longint;
  begin
    readln(f,n);
    for i:=1 to n do
      read(f,v[i]);
  end;

function pozitionare(i,j:longint):longint;
  begin
    x:=v[i];
    while i<j do
      begin
        while (j>i) and (x<=v[j]) do
          j:=j-1;
        v[i]:=v[j];
        while (i<j) and (v[i]<=x) do
          i:=i+1;
        v[j]:=v[i];
      end;
    v[i]:=x;
    pozitionare:=i;
  end;

procedure Qsort(st,dr:longint);
var m:longint;
  begin
    m:=pozitionare(st,dr);
    if st<m-1 then
      Qsort(st,m-1);
    if m+1<dr then
      Qsort(m+1,dr);
  end;

procedure rezolvare;
var i, j:longint;
  begin
    a[0]:=true;
    for i:=1 to n do
      if not a[v[i]] then
        begin
          rez:=rez+1;
          vrez[rez]:=v[i];
          for j:=v[i] to v[n] do
            if a[j-v[i]] then
              a[j]:=true;
        end;
   writeln(g,rez);
   for i:=1 to rez do
     writeln(g,vrez[i]);
  end;

  begin
    assign(f,'economie.in'); reset(f);
    assign(g,'economie.out'); rewrite(g);
    citire;
    Qsort(1,n);
    rezolvare;
    close(f);
    close(g);
  end.