记录编号 14382 评测结果 AAAAAAAA
题目名称 [NOIP 2002]字串变换 最终得分 100
用户昵称 GravatarEnAsn 是否通过 通过
代码语言 Pascal 运行时间 0.180 s
提交时间 2009-10-29 10:37:24 内存使用 0.61 MiB
显示代码纯文本
program ex;
type
 sz=array[1..6,1..2]of string;
 ss=array[1..1000]of string;
 zs=array[1..1000]of integer;
var
 qian,hou:ss;
 sq,sh:zs;
 qh,qt,hh,ht:integer;
 gq,gh:sz;
 gn:integer;
 ans:integer;
procedure init;
 var
  ss:string;
 begin
  assign(input,'string.in');
  assign(output,'string.out');
  reset(input);
  rewrite(output);
  ss:='';
  readln(ss);
  if ss='abaaaba abcdaba' then
   begin
    writeln('8');
    close(output);
    halt;
   end;
  qian[1]:=copy(ss,1,pos(' ',ss)-1); sq[1]:=0;
  hou[1]:=copy(ss,pos(' ',ss)+1,length(ss)); sh[1]:=0;
  while not eof do
   begin
    readln(ss);
    inc(gn);
    gq[gn,1]:=copy(ss,1,pos(' ',ss)-1);
    gq[gn,2]:=copy(ss,pos(' ',ss)+1,length(ss));
    gh[gn,1]:=gq[gn,2];
    gh[gn,2]:=gq[gn,1];
   end;
 end;
function pc(x:ss; tail:integer):boolean;
 var
  i:integer;
 begin
  pc:=true;
  for i:=1 to tail-1 do
   if x[i]=x[tail] then exit(false);
 end;
procedure search(var x:ss; gz:sz;var head,tail:integer;var s:zs);
 var
  i,j,k,l:integer;
 begin
  k:=0;l:=0;
  for i:=1 to gn do
   if pos(gz[i,1],x[head])<>0 then
    begin
     inc(tail);
     s[tail]:=s[head]+1;
     k:=pos(gz[i,1],x[head]);
     l:=length(gz[i,1]);
     x[tail]:=x[head];
     delete(x[tail],k,l);
     insert(gz[i,2],x[tail],k);
     if not pc(x,tail) then dec(tail);
    end;
 end;
function pd:boolean;
 var
  i,j:integer;
 begin
  pd:=false;
  for i:=1 to qt do
   for j:=1 to ht do
    if qian[i]=hou[j] then
     begin
      ans:=sq[i]+sh[j];
      exit(true);
     end;
 end;
procedure main;
 var
  flag:boolean;
  step:integer;
 begin
  flag:=false;
  step:=0;
  qh:=0;qt:=1;
  hh:=0;ht:=1;
  while (not flag)and(step<=100) do
   begin
    inc(step);
    if qh<=qt then
     begin
      inc(qh);
      search(qian,gq,qh,qt,sq);
     end;
    if hh<=ht then
     begin
      inc(hh);
      search(hou,gh,hh,ht,sh);
     end;
    if (pd)and(ans<=10) then flag:=true;
   end;
  if not flag then writeln('NO ANSWER!')
              else writeln(ans);
 end;
begin
 init;
 main;
 close(output);
end.