比赛 20091023练习题 评测结果 AATTTTTTTT
题目名称 不听话的机器人 最终得分 20
用户昵称 maxiem 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2009-10-26 10:57:07
显示代码纯文本
  1. program nrobot;
  2. const dir:array [1..4,1..2] of shortint=((-1,0),(0,1),(1,0),(0,-1));
  3. var
  4. i,j,n,m,x,y:integer;
  5. dp:array [1..100,1..100,1..4] of integer;
  6. table:array [1..100,1..100] of boolean;
  7. command:array [1..1000] of char;
  8. s:string;
  9. procedure get(x,y,i,d,pas:integer);
  10. var min,x0,y0,d0:integer;
  11. begin
  12. min:=maxint;
  13. if i<=m then begin
  14. x0:=x;y0:=y;d0:=d;
  15. case command[i] of
  16. 'F':begin
  17. inc(x0,dir[d,1]);
  18. inc(y0,dir[d,2]);
  19. end;
  20. 'B':begin
  21. dec(x0,dir[d,1]);
  22. dec(y0,dir[d,2]);
  23. end;
  24. 'L':begin
  25. dec(d0);
  26. if d0=0 then d0:=4;
  27. end;
  28. 'R':begin
  29. inc(d0);
  30. if d0=5 then d0:=1;
  31. end;
  32. end;
  33. if (x0<=n) and (x0>=1) and (y0<=n) and (y0>=1) and (table[x0,y0]=false) then begin
  34. get(x0,y0,i+1,d0,pas);
  35. min:=dp[x0,y0,d0];
  36. end;
  37. get(x,y,i+1,d,pas+1);
  38. if min>dp[x,y,d] then min:=dp[x,y,d];
  39. end;
  40. if min=maxint then dp[x,y,d]:=pas else dp[x,y,d]:=min;
  41. end;
  42. begin
  43. fillchar (table,sizeof(table),0);
  44. fillchar (dp,sizeof(dp),$FF);
  45. assign (input,'nrobot.in');
  46. reset (input);
  47. readln (n,m,x,y);
  48. for i:=1 to n do begin
  49. readln (s);
  50. for j:=1 to n do if s[j]='*' then table[i,j]:=true;
  51. end;
  52. for i:=1 to m do begin
  53. readln (s);
  54. command[i]:=s[1];
  55. end;
  56. close (input);
  57. assign (output,'nrobot.out');
  58. rewrite (output);
  59. get(x,y,1,1,0);
  60. writeln (dp[x,y,1]);
  61. close (output);
  62. end.