Cod sursa(job #290520)

Utilizator hominiduBirsan Dragos hominidu Data 28 martie 2009 00:46:16
Problema Combinari Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.4 kb
program combinari;
type stiva=array [1..20] of int64;
var f,g:text;
    st:stiva;
    ev,as:boolean;
    n,k,p:integer;
procedure init(k:integer;var st:stiva);
begin
 if k>1 then st[k]:=st[k-1]
        else if k=1 then st[k]:=0;
end;
procedure succesor(var as:boolean;var st:stiva;k:integer);
begin
if st[k]<n-p+k then begin st[k]:=st[k]+1;
                                         as:=true;
                                end
                        else as:=false;
end;
procedure valid(var ev:boolean;var st:stiva;k:integer);
var i:integer;
begin
ev:=true;
for i:=1 to k-1 do if st[i]=st[k] then ev:=false;
if (k>=2) and (st[k-1]>st[k]) then ev:=false;
end;
function solutie(k:integer):boolean;
begin
solutie:=(k=p);
end;


procedure tipar;
var i:integer;
begin
assign(g,'combinari.out');
rewrite(g);
for i:=1 to p do write(g,st[i],' ');
writeln(g);
close(g);
end;

begin
assign(f,'combinari.in');
reset(f);
read(f,n,p);
close(f);

k:=1;init(k,st);
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 tipar
                              else begin
                                     k:=k+1;
                                     init(k,st)
                                     end
           else k:=k-1;
   end;
  readln;
end.