Ovo je samo za one koji su radili ili rade Usaco.
Radio sam Silver diviziju i imam mali problem oko zadatka ants. Naime, ideja mi je dobra (znam jer se poklapa sa njihovom zvanicnom), ali nikako ne mogu da nadjem gresku zasto mi ne prolazi za sve test primere. Ostala dva su mi u potpunosti tacna i ovo mi je sansa da predjem u Gold diviziju, zato i trazim pomoc. Saljem kod, pa ako neko ima zivaca da mi kaze gde sam pogresio, hvala unapred. Znam da je naporno gledati tudj kod, ali mozda neko nadje vremena. Ok je i ako neko posalje neki mali test primer (do 10 mrava) na kom mi puca program. Hvala jos jednom.
{
PROG: ants
LANG: PASCAL
}
program Ants;
const
MaxN=110;
MaxM=1010;
type
Matrix=array[0..MaxM,0..MaxN] of longint;
Niz=array[1..MaxN] of longint;
var
T,A,S,B:longint;
Family:Niz;
D:Matrix;
procedure Init;
var
f:text;
i,j:longint;
begin
assign(f,'ants.in');
reset(f);
readln(f,T,A,S,B);
for i:=1 to T do
Family[i]:=0;
for i:=1 to A do
begin
readln(f,j);
inc(Family[j])
end;
close(f)
end;
procedure Solve;
var
i,j,k:longint;
f:text;
Res,Sum:longint;
begin
Sum:=0;
for i:=0 to MaxN do
for j:=0 to MaxM do
D[i,j]:=0;
for i:=1 to T do
begin
j:=1;
Sum:=Sum+Family[i];
while Sum>=j do
begin
k:=0;
while (j-k>=0) and (k<=Family[i]) do
begin
if (j-k)=0 then
inc(D[i,j])
else
D[i,j]:=(D[i,j]+D[i-1,j-k]) mod 1000000;
inc(k)
end;
inc(j)
end;
end;
assign(f,'ants.out');
rewrite(f);
Res:=0;
for i:=S to B do
Res:=(Res+D[T,i]) mod 1000000;
writeln(f,Res);
close(f)
end;
begin
Init;
Solve
end.
Radio sam Silver diviziju i imam mali problem oko zadatka ants. Naime, ideja mi je dobra (znam jer se poklapa sa njihovom zvanicnom), ali nikako ne mogu da nadjem gresku zasto mi ne prolazi za sve test primere. Ostala dva su mi u potpunosti tacna i ovo mi je sansa da predjem u Gold diviziju, zato i trazim pomoc. Saljem kod, pa ako neko ima zivaca da mi kaze gde sam pogresio, hvala unapred. Znam da je naporno gledati tudj kod, ali mozda neko nadje vremena. Ok je i ako neko posalje neki mali test primer (do 10 mrava) na kom mi puca program. Hvala jos jednom.
{
PROG: ants
LANG: PASCAL
}
program Ants;
const
MaxN=110;
MaxM=1010;
type
Matrix=array[0..MaxM,0..MaxN] of longint;
Niz=array[1..MaxN] of longint;
var
T,A,S,B:longint;
Family:Niz;
D:Matrix;
procedure Init;
var
f:text;
i,j:longint;
begin
assign(f,'ants.in');
reset(f);
readln(f,T,A,S,B);
for i:=1 to T do
Family[i]:=0;
for i:=1 to A do
begin
readln(f,j);
inc(Family[j])
end;
close(f)
end;
procedure Solve;
var
i,j,k:longint;
f:text;
Res,Sum:longint;
begin
Sum:=0;
for i:=0 to MaxN do
for j:=0 to MaxM do
D[i,j]:=0;
for i:=1 to T do
begin
j:=1;
Sum:=Sum+Family[i];
while Sum>=j do
begin
k:=0;
while (j-k>=0) and (k<=Family[i]) do
begin
if (j-k)=0 then
inc(D[i,j])
else
D[i,j]:=(D[i,j]+D[i-1,j-k]) mod 1000000;
inc(k)
end;
inc(j)
end;
end;
assign(f,'ants.out');
rewrite(f);
Res:=0;
for i:=S to B do
Res:=(Res+D[T,i]) mod 1000000;
writeln(f,Res);
close(f)
end;
begin
Init;
Solve
end.