← Back to topics
Topic

z-cifre

halil
Nikako ne mogu da vidim u čemu grešim u ovom zadatku.
Ideja je jednostavna (čini mi se): S[x] je broj brojeva ciji je zbir cifara x, a P[x] je broj brojeva ciji je proizvod cifara x.
Rezultat bi trebao dao zbir proizvoda S[x]*P[x], za x=1..N/2.
Molio bi vas za pomoć.

Evo i koda (prva dva testa prolaze):


Program Z_Cifre;

const
MaxN = 1000 div 2;
MaxS = MaxN * 9;
ModM = 10000;

var
NE: longint;
S,P: array[0..MaxS] of longint;

procedure SumX(n: longint);
var
i,j,k,f,w,z: longint;
begin
FillDWord(S, MaxS+1, 0);
for i:= 0 to 9 do S[i]:= 1;
for k:= 2 to n do begin
if (k < n) then f:= 0 else f:= 1;
for j:= k*9 downto 0 do begin
z:= 0;
for i:= f to 9 do begin
w:= j-i;
if (w >= 0) then z:= z + S[w];
end;
S[j]:= z mod ModM;
end;
end;
end;

procedure MulX(n: longint);
var
i,j,k,z: longint;
begin
FillDWord(P, MaxS+1, 0);
for j:= 1 to 9 do P[j]:= 1;
for k:= 2 to n do begin
for j:= k*9 downto 1 do begin
z:= 0;
for i:= 1 to 9 do begin
if ((j mod i) = 0) then z:= z + P[j div i];
end;
P[j]:= z mod ModM;
end;
end;
end;

procedure DoWork(n: longint);
var
i: integer;
r: int64;
begin
SumX(n);
MulX(n);
r:= 0;
for i:= n*9 downto 1 do r:= (r + (S[i]*P[i]) mod ModM) mod ModM;
writeln(r);
end;

begin
readln(NE);
DoWork(NE div 2);
end.
Al3kSaNdaR
Mislim da je kod dobar ali prelazi memorijsko ogranicenje, stavi da su ti matrice tipa integer!
halil
Probao sam, ali ne vredi.
Al3kSaNdaR
Slusaj, mislim da je ovaj kod dobar.

http://www.z-trening.com/new/www/html/submit.php?submit=7100039955&subm_code=1

Probaj tu da stavis kao integer i posaljes, matrice trebaju da idu do 4500, a ne do 5000.
halil
Ne vredi. Ma, vreovatno je neki lapsus kod mene. Kasnije ću se vratiti na problem. Hvala ti . Pozdrav