| 比赛 | 
    20120706 | 
    评测结果 | 
    AAEEEETTTT | 
    | 题目名称 | 
    解密 | 
    最终得分 | 
    20 | 
    | 用户昵称 | 
    isabella | 
    运行时间 | 
    0.000 s  | 
    | 代码语言 | 
    Pascal | 
    内存使用 | 
    0.00 MiB  | 
    | 提交时间 | 
    2012-07-06 11:51:43 | 
显示代码纯文本
var
 tree:array[1..1000000]of ansistring;
 a,num,b,po:array[1..1000000]of longint;
 min,max:array[0..1000000]of longint;
 s,c:ansistring;
 i,j,p,tot,n,m,k,temp,tt,ii:longint;
 function make(c:ansistring):longint;
  var i:longint;
  begin
   i:=1;
   while tree[i]<>'' do
    begin
      if c=tree[i] then exit(num[i]);
      if c>tree[i] then i:=i*2+1 else i:=i*2;
    end;
   inc(tot);
   tree[i]:=c;num[i]:=tot;
   exit(tot);
  end;
begin
assign(input,'kriptogram.in');reset(input);
assign(output,'kriptogram.out');rewrite(output);
 readln(s);tot:=0;
 p:=pos(' ',s);
 n:=0;
 min[0]:=maxlongint;max[0]:=0;
 while p<>0 do
  begin
   c:=copy(s,1,p-1);
   inc(n);a[n]:=make(c);
   if (a[n]<min[n-1])then min[n]:=a[n] else min[n]:=min[n-1];
   if (a[n]>max[n-1])then max[n]:=a[n] else max[n]:=max[n-1];
   delete(s,1,p);p:=pos(' ',s);
  end;
 fillchar(tree,sizeof(tree),0);
 fillchar(num,sizeof(num),0);
 readln(s);tot:=0;
 p:=pos(' ',s);
 m:=0;
 while p<>0 do
  begin
   c:=copy(s,1,p-1);
   inc(m);b[m]:=make(c);
   delete(s,1,p);p:=pos(' ',s);
  end;
 tt:=tot;
 for i:=1 to m do
  if a[i]<>b[i] then break;
 if (i=m)and(a[i]=b[i])then
  begin writeln(1);close(input);close(output);halt;end;
 for i:=2 to n+1-m do
  begin
   ii:=i+m-1;
   if tt>(max[ii]-min[ii]+1)then continue;
   fillchar(po,sizeof(po),0);
   tot:=0;
   for j:=i to ii do
    begin
     if po[a[j]]=0 then begin inc(tot);k:=tot;po[a[j]]:=tot;end
      else k:=po[a[j]];
     if k<>b[j-i+1]then break;
    end;
   if (j=i+m-1)and(k=b[m])then
    begin writeln(i);close(input);close(output);halt;end;
  end;
 close(input);close(output);
end.