Evo otkucah ga za 20-tak minuta i proslo je sve za 0.01 - 0.02 sec.
Ispade na kraju jako lak zadatak, al trebalo je malcice mucnuti glavom
Evo i koda..
Code:
{
PROB: cnums
LANG: PASCAL
}
program pera;
var
min,max:longint;
rez:longint;
niz:array[1..4] of integer;
procedure DatIN;
var
f:Text;
begin
assign(f,'cnums.in'); reset(f);
read(f,min,max);
close(F);
end;
procedure DatOut;
var
f:Text;
begin
assign(f,'cnums.out'); rewrite(f);
writeln(f,rez);
close(f);
end;
procedure PostaviPrvu(n:integer);
var
i:integer;
begin
for i:=1 to n do niz[i]:=i;
end;
function Poslednja(n:integer):boolean;
var
i:integer;
ok:boolean;
begin
i:=n;
ok:=true;
while ok and (i>=1) do
begin
if niz[i]=25-n+i then dec(I)
else ok :=false;
end;
poslednja:=ok;
end;
procedure postavisledecu(n:integer);
var
i,j:integer;
begin
i:=n;
while niz[i]=25-n+i do dec(i);
inc(niz[i]);
for j:=i+1 to n do niz[j]:=niz[j-1]+1;
end;
function st(n:integer):longint;
var
rez,x:longint;
begin
if n>=0 then
begin
rez:=1;
x:=2;
while n>0 do
begin
if odd(n) then rez:=rez*x;
n:=n div 2;
x:=sqr(x);
end;
st:=rez;
end
else st:=0;
end;
function konv(n:integer):longint;
var
sum:longint;
i:integer;
begin
sum:=0;
for i:=1 to n do sum:=sum + St(niz[i]-1);
konv:=sum;
end;
procedure Solve;
var
br:longint;
i:integer;
begin
rez:=0;
for i:=1 to 4 do
begin
PostaviPrvu(i);
br:=konv(I);
if (br>=min) and (br<=max) then inc(rez);
while not Poslednja(i) do
begin
PostaviSledecu(i);
br:=konv(i);
if (br>=min) and (br<=max) then inc(rez);
end;
end;
end;
begin
DatIN;
Solve;
DatOut;
end.
Don’t do drugs, sleep deprivation is better.