Cod sursa(job #196699)

Utilizator bishoppAlex Cristian bishopp Data 28 iunie 2008 10:58:44
Problema Loto Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.51 kb
type stiva=array[1..6] of byte;
var st:stiva;
    v:array[1..100] of longint;
    as,ev:boolean;
    suma,s:longint;
    n,i,k:byte;
    f,g:text;
    ok:boolean;

procedure succesor(var st:stiva;k:integer;var as:boolean);
begin
if st[k]<n then begin
                as:=true;
                inc(st[k]);
                end
           else as:=false;
end;

procedure valid(var st:stiva;k:integer;var ev:boolean);
begin
ev:=true;
suma:=0;
if k>1 then for i:=1 to k do suma:=suma+v[st[i]];
if suma>s then ev:=false;
end;

function solutie(k:integer):boolean;
begin
solutie:=(k=6) and (suma=s);
end;

procedure tipar;
begin
for i:=1 to k do write(g,v[st[i]],' ');
end;

begin
settime(0,0,0,0);
assign(f,'loto.in');reset(f);
assign(g,'loto.out');rewrite(g);
readln(f,n,s);
i:=0;
for i:=1 to n do read(f,v[i]);
k:=1;
st[k]:=0;
ok:=false;
while (k>0) and (ok=false) do begin
      repeat
      succesor(st,k,as);
      if as then valid(st,k,ev);
      until (as and ev) or not as;
      if as then begin if solutie(k) then begin
                                    tipar;
                                    ok:=true;
                                    end
                               else if k<6 then begin
                                    inc(k);
                                    st[k]:=0;
                                    end
                               end
              else dec(k);
              end;
if ok=false then writeln(g,-1);
close(f);
close(g);
end.