Cod sursa(job #214099)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 12 octombrie 2008 18:53:06
Problema NextSeq Scor 95
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.22 kb
var f,g:Text;
    v,b,c,d:array[0..10010]of integer;
    n,m,p,i,x:longint;

procedure quick(l,r:integer);
var j,i,x,aux:integer;
begin
  i:=l;
  j:=r;
  x:=v[l+random(r-l)];
  repeat
    while (v[i]<x) do inc(i);
    while (v[j]>x) do dec(j);
    if (i<=j)then
      begin
        aux:=v[i];
        v[i]:=v[j];
        v[j]:=aux;
        inc(i);
        dec(j);
      end;
  until i>j;
  if (l<j)then quick(l,j);
  if (i<r)then quick(i,r);
end;

procedure dif;
begin
  for i:=m downto 1 do
    b[i+p-m]:=b[i];
  for i:=1 to p-m do
    b[i]:=0;
  for i:=p downto 1 do
    begin
      if (c[i]<b[i])then
        begin
          inc(c[i],n);
          dec(c[i-1]);
        end;
      c[i]:=c[i]-b[i];
    end;
end;

begin
assign(f,'nextseq.in');
assign(g,'nextseq.out');
reset(f);
rewrite(g);
read(f,n,m,p);
for i:=1 to n do
  read(f,v[i]);
randomize;
quick(1,n);
for i:=1 to n do
  d[v[i]]:=i;
for i:=1 to m do
  begin
    read(f,x);
    b[i]:=d[x]-1;
  end;
for i:=1 to p do
  begin
    read(f,x);
    c[i]:=d[x]-1;
  end;
if (p>m)then inc(c[1]);
dif;
x:=0;
m:=1;
for i:=p downto 1 do
  begin
    inc(x,c[i]*m);
    m:=m*n;
  end;
write(g,x-1);
close(f);
close(g);
end.