Cod sursa(job #9578)
Utilizator | Data | 27 ianuarie 2007 16:16:48 | |
---|---|---|---|
Problema | Secventa 5 | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Unirea 2007, clasele 11-12 | Marime | 2.72 kb |
program secv5;
var l,u,n,el:longint;
st,v:array[1..100]of longint;
g:text;
k,j:integer;
as,ev:boolean;
ap:array[1..maxint]of byte;
procedure citire;
var f:text;
i:longint;
begin
assign(f,'secv5.in'); reset(f);
read(f,n,l,u);
for i:=1 to n do read(f,v[i]);
end;
procedure init;
begin
st[k]:=0;
end;
procedure reinit;
var i:integer;
begin
for i:=1 to n do
begin
if st[i]<>0 then ap[v[st[i]]]:=0;
if i<>1 then st[i]:=0;
end;
el:=0;
end;
procedure succesor;
begin
if k>1 then
if st[k-1]<>n then
begin
if st[k]<>0 then dec(ap[v[st[k]]]);
st[k]:=st[k-1]+1;
if ap[v[st[k]]]=0 then
inc(el);
inc(ap[v[st[k]]]);
as:=true;
end
else as:=false
else if st[k]<n then begin
inc(st[k]);
if ap[v[st[k]]]=0 then
inc(el);
inc(ap[v[st[k]]]);
as:=true; end
else as:=false;
end;
procedure valid;
begin
ev:=true;
if el>u then ev:=false;
end;
begin {pp}
citire;
k:=1;
init;
while (st[1]<>5)or ((st[1]=5)and as) do
begin
repeat
succesor;
if as then valid;
until not as or (as and ev);
if as then if (el>=l)and(el<=u) then begin
inc(j); if k=n then begin
k:=1;
reinit;
end
else begin
inc(k);
init;
end;
end
else
begin
if k=n then begin
k:=1;
reinit;
end
else begin
inc(k);
init;
end;
end
else begin
k:=1;
reinit;
end;
end;
assign(g,'secv5.out'); rewrite(g);
write(g,j);
close(g);
end.