Cod sursa(job #249508)

Utilizator rendorzegAndrei Pavel rendorzeg Data 28 ianuarie 2009 17:18:23
Problema Loto Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.37 kb
program permutari;
type stiva=array[1..100] of integer;
   var st,a:stiva;
   n,k,p,s,i:integer;
   as,ev,ok:boolean;
   f,g:text;
procedure init (k:integer;var st:stiva);
begin
st[k]:=0;
end;
procedure succesor (var as: boolean; var st: stiva; k:integer);
begin
   if st[k]<6 then
begin
st[k]:=st[k]+1;
as:=true;
end
else as:=false
end;
procedure valid (var ev:boolean; st:stiva; k:integer);
var i:integer;
begin
ev:=true;
s:=0;
if k=6 then begin
for i:=1 to k do s:=s+a[st[i]];
if s<>p then ev:=false;
end;
if a[st[k]]<a[st[k-1]] then ev:=false;
end;
function solutie(k:integer):boolean;
begin
solutie:=(k=6)
end;
procedure tipar;
var i:integer;
begin
for i:=1 to 6 do write (g,a[st[i]],' ');
writeln(g);
end;
Begin
assign(f,'loto.in');
reset(f);
assign(g,'loto.out');
rewrite(g);
read(f,n);
read(f,p);
for i:=1 to n do read(f,a[i]);
{write ('n='); readln(n);}
k:=1; init (k,st);  ok:=false;
while (k>0) do
   begin
      repeat
            succesor (as, st, k);
           if as then valid (ev,st,k);
      until (not as) or (as and ev);
if as then
if solutie (k) then     begin
                        tipar;
                        ok:=true;
                        break;
                        end
else begin
k:=k+1;
init (k,st)
end
else k:=k-1
end;
if ok=false then write(g,'-1');
close(f);
close(g);
{readln;}
End.