比赛 20091023练习题 评测结果 AATTTTTTTT
题目名称 不听话的机器人 最终得分 20
用户昵称 maxiem 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2009-10-26 10:57:07
显示代码纯文本
program nrobot;
const dir:array [1..4,1..2] of shortint=((-1,0),(0,1),(1,0),(0,-1));
var
  i,j,n,m,x,y:integer;
  dp:array [1..100,1..100,1..4] of integer;
  table:array [1..100,1..100] of boolean;
  command:array [1..1000] of char;
  s:string;
procedure get(x,y,i,d,pas:integer);
var min,x0,y0,d0:integer;
begin
  min:=maxint;
  if i<=m then begin
    x0:=x;y0:=y;d0:=d;
    case command[i] of
      'F':begin
        inc(x0,dir[d,1]);
        inc(y0,dir[d,2]);
      end;
      'B':begin
        dec(x0,dir[d,1]);
        dec(y0,dir[d,2]);
      end;
      'L':begin
        dec(d0);
        if d0=0 then d0:=4;
      end;
      'R':begin
        inc(d0);
        if d0=5 then d0:=1;
      end;
    end;
    if (x0<=n) and (x0>=1) and (y0<=n) and (y0>=1) and (table[x0,y0]=false) then begin
      get(x0,y0,i+1,d0,pas);
      min:=dp[x0,y0,d0];
    end;
    get(x,y,i+1,d,pas+1);
    if min>dp[x,y,d] then min:=dp[x,y,d];
  end;
  if min=maxint then dp[x,y,d]:=pas else dp[x,y,d]:=min;
end;
begin
  fillchar (table,sizeof(table),0);
  fillchar (dp,sizeof(dp),$FF);
  assign (input,'nrobot.in');
  reset (input);
  readln (n,m,x,y);
  for i:=1 to n do begin
    readln (s);
    for j:=1 to n do if s[j]='*' then table[i,j]:=true;
  end;
  for i:=1 to m do begin
    readln (s);
    command[i]:=s[1];
  end;
  close (input);
  assign (output,'nrobot.out');
  rewrite (output);
  get(x,y,1,1,0);
  writeln (dp[x,y,1]);
  close (output);
end.