Cod sursa(job #876579)
Utilizator | Rares Cheseli rares96cheseli | Data | 11 februarie 2013 22:01:58 |
---|---|---|---|
Problema | Ridicare la putere in timp logaritmic | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva educationala | Marime | 1.39 kb |
type vect=array[0..500] of qword;
var u,v:vect; n,k,i,j,p,l,d:word; r,m:integer;
f,g:text;
begin
assign(f,'expozitie.in');reset(f);
assign(g,'expozitie.out');rewrite(g);
read(f,n,d,k);
r:=n-k*d;
m:=r+d-1;
if r<0 then writeln(g,0)
else if r=0 then writeln(g,1)
else if r=1 then writeln(g,d)
else begin
v[0]:=1; u[0]:=1; for i:=1 to r do v[i]:=0;
i:=1; j:=1;
while i<=m-r do begin
if j=1 then begin
for p:=1 to r do u[p]:=v[p]+v[p-1];
j:=0;
end
else begin
for p:=1 to r do v[p]:=u[p]+u[p-1];
j:=1;
end;
inc(i);
end;
l:=0;
while i<=m do begin
if j=1 then begin
for p:=1+l to r do u[p]:=v[p]+v[p-1];
j:=0; inc(l);
end
else begin
for p:=1+l to r do v[p]:=u[p]+u[p-1];
j:=1; inc(l);
end;
inc(i);
end;
if j=1 then write(g,v[r])
else write(g,u[r]);
end;
close(f); close(g);
end.