Cod sursa(job #175827)

Utilizator chelaru_t_achelaru traian andrei chelaru_t_a Data 10 aprilie 2008 14:26:41
Problema Loto Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.61 kb
type loto=record
          a,b:integer;
          end;
stiva=array [1..100] of loto;
var st:stiva;
  v:array [1..100] of integer;
  n,k:integer;
  s:longint;
  f,t:text;
  ok,as,ev:boolean;

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

 procedure init(k:integer;var st:stiva);
  begin
   st[k].a:=0;
   st[k].b:=0;
  end;

 procedure succesor(k:integer;var st:stiva;var as:boolean);
  begin
   if st[k].b<n then
     begin
     st[k].b:=st[k].b+1;
     st[k].a:=v[st[k].b];
     as:=true;
     end
   else as:=false;
  end;

 procedure valid(k:integer;st:stiva;var ev:boolean);
  begin
   ev:=true;
  end;

 function solutie(k:integer;st:stiva):boolean;
  var sum:longint;
    i:integer;
  begin
   sum:=0;
   if k=6 then
     begin
     for i:=1 to 6 do sum:=sum+st[i].a;
     if sum=s then solutie:=true
     else solutie:=false;
     end
   else solutie:=false;
  end;

 procedure tipar;
  var i:integer;
  begin
   if k<>0 then
     for i:=1 to 6 do write(t,st[i].a,' ')
   else write(t,'-1');
  end;

begin
  assign(f,'loto.in');
  assign(t,'loto.out');
  reset(f);
  rewrite(t);
  citire;
  k:=1;
  init(k,st);
  ok:=false;
  while (not ok) and (k>0) do
    begin
    repeat
    succesor(k,st,as);
    valid(k,st,ev);
    until (as and ev) or (not as);
    if as then
      if solutie(k,st) then ok:=true
      else if k<6 then
             begin
             k:=k+1;
             init(k,st);
             end
           else k:=k-1
    else k:=k-1;
    end;
  tipar;
  close(f);
  close(t);
end.