Cod sursa(job #9578)

Utilizator hitmannCiocas Radu hitmann 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.