记录编号 14688 评测结果 AAAAAAAAAAA
题目名称 [USACO Oct09] 乳草的入侵 最终得分 100
用户昵称 Gravatar.Xmz 是否通过 通过
代码语言 Pascal 运行时间 0.015 s
提交时间 2009-11-03 12:48:42 内存使用 0.31 MiB
显示代码纯文本
program xmz;
var
f1,f2:text;
x:array[0..101,0..101]of char;
f:array[0..101,0..101]of longint;
dx,dy:array[1..20000]of longint;

h,m,n,x1,y1,a,b,s:longint;
begin
 assign(f1,'milkweed.in');assign(f2,'milkweed.out');
 reset(f1);rewrite(f2);
 read(f1,m,n);
 readln(f1,dx[1],dy[1]);
 h:=1;
 for a:=n downto 1 do
  begin
   for b:=1 to m do
    read(f1,x[b,a]);
   readln(f1);
  end;
 for a:=1 to n do
  for b:=1 to m do
   f[b,a]:=99999999;
 f[dx[1],dy[1]]:=0;
 a:=0;
 repeat
  inc(a);
  if (dx[a]+1>0)and(dx[a]+1<=m)and(dy[a]>0)and(dy[a]<=n)and(f[dx[a]+1,dy[a]]>f[dx[a],dy[a]]+1)and(x[dx[a]+1,dy[a]]<>'*') then
  begin inc(h);dx[h]:=dx[a]+1;dy[h]:=dy[a];f[dx[a]+1,dy[a]]:=f[dx[a],dy[a]]+1;end;
  if (dx[a]-1>0)and(dx[a]-1<=m)and(dy[a]>0)and(dy[a]<=n)and(f[dx[a]-1,dy[a]]>f[dx[a],dy[a]]+1)and(x[dx[a]-1,dy[a]]<>'*') then
  begin inc(h);dx[h]:=dx[a]-1;dy[h]:=dy[a];f[dx[a]-1,dy[a]]:=f[dx[a],dy[a]]+1;end;
  if (dx[a]>0)and(dx[a]<=m)and(dy[a]+1>0)and(dy[a]+1<=n)and(f[dx[a],dy[a]+1]>f[dx[a],dy[a]]+1)and(x[dx[a],dy[a]+1]<>'*') then
  begin inc(h);dx[h]:=dx[a];dy[h]:=dy[a]+1;f[dx[a],dy[a]+1]:=f[dx[a],dy[a]]+1;end;
  if (dx[a]>0)and(dx[a]<=m)and(dy[a]-1>0)and(dy[a]-1<=n)and(f[dx[a],dy[a]-1]>f[dx[a],dy[a]]+1)and(x[dx[a],dy[a]-1]<>'*') then
  begin inc(h);dx[h]:=dx[a];dy[h]:=dy[a]-1;f[dx[a],dy[a]-1]:=f[dx[a],dy[a]]+1;end;

  if (dx[a]+1>0)and(dx[a]+1<=m)and(dy[a]-1>0)and(dy[a]-1<=n)and(f[dx[a]+1,dy[a]-1]>f[dx[a],dy[a]]+1)and(x[dx[a]+1,dy[a]-1]<>'*') then
  begin inc(h);dx[h]:=dx[a]+1;dy[h]:=dy[a]-1;f[dx[a]+1,dy[a]-1]:=f[dx[a],dy[a]]+1;end;
  if (dx[a]-1>0)and(dx[a]-1<=m)and(dy[a]-1>0)and(dy[a]-1<=n)and(f[dx[a]-1,dy[a]-1]>f[dx[a],dy[a]]+1)and(x[dx[a]-1,dy[a]-1]<>'*') then
  begin inc(h);dx[h]:=dx[a]-1;dy[h]:=dy[a]-1;f[dx[a]-1,dy[a]-1]:=f[dx[a],dy[a]]+1;end;
  if (dx[a]+1>0)and(dx[a]+1<=m)and(dy[a]+1>0)and(dy[a]+1<=n)and(f[dx[a]+1,dy[a]+1]>f[dx[a],dy[a]]+1)and(x[dx[a]+1,dy[a]+1]<>'*') then
  begin inc(h);dx[h]:=dx[a]+1;dy[h]:=dy[a]+1;f[dx[a]+1,dy[a]+1]:=f[dx[a],dy[a]]+1;end;
  if (dx[a]-1>0)and(dx[a]-1<=m)and(dy[a]+1>0)and(dy[a]+1<=n)and(f[dx[a]-1,dy[a]+1]>f[dx[a],dy[a]]+1)and(x[dx[a]-1,dy[a]+1]<>'*') then
  begin inc(h);dx[h]:=dx[a]-1;dy[h]:=dy[a]+1;f[dx[a]-1,dy[a]+1]:=f[dx[a],dy[a]]+1;end;
 until a=h;

 for a:=1 to n do
  for b:=1 to m do
   if x[b,a]<>'*' then
   if f[b,a]=99999999 then s:=-1
   else if (s<f[b,a])and(s<>-1) then s:=f[b,a];
   writeln(f2,s);
 close(f1);close(f2);
end.