讨论 / 我的个祖先啊,求大神解析(PID=699)
chenghao 2013-08-06 21:26:00
点我顶贴 收藏 删除
这个程序的效率我知道不高,不过为啥会出现错误啊(4个点超时,3个点错误)

type arr=array[1..50] of longint;

var s:string;

n,ans:longint;

rule:array[1..50,1..2] of string;

////////////////////////////////////////////////////////////////////////////////

procedure init;

var ss:string;

i:longint;

begin

assign(input,'zuxian.in'); assign(output,'zuxian.out');

reset(input); rewrite(output);

readln(s); ans:=length(s);

readln(n);

for i:=1 to n do

begin

readln(ss); rule[i,1]:=copy(ss,1,pos('-',ss)-1);

delete(ss,1,pos('>',ss)); rule[i,2]:=ss;

end;

end;

////////////////////////////////////////////////////////////////////////////////

procedure dfs(s:string);

var i,j,num,num2:longint;

ss:string;

recordnum:arr;

begin

for i:=1 to n do

begin

ss:=s;

num2:=0;

num:=pos(rule[i,2],ss);

while num<>0 do

begin

inc(num2);

recordnum[num2]:=num+num2-1;

delete(ss,num,1);

num:=pos(rule[i,2],ss);

end;

for j:=1 to num2 do

begin

ss:=s;

delete(ss,recordnum[j],length(rule[i,2]));

insert(rule[i,1],ss,recordnum[j]);

if length(ss)<ans then ans:=length(ss);

dfs(ss);

end;

end;

end;

////////////////////////////////////////////////////////////////////////////////

procedure print;

begin

write(ans);

end;

////////////////////////////////////////////////////////////////////////////////

begin

init;

dfs(s);

print;

end.

查看更多回复
提交回复