jzoj 1588. 【普及模拟】GPS定位 2016-07-16 14:10 276人阅读 评论(2) 收藏

发布于 2019-03-21  1018 次阅读


 

题目描述

今天是你的生日,你得到一个生日礼物全球定位系统GPS(Global Positioning System),可以用来记录你的路线的一些重要的点,便于回来时方便,这些点需要输入名字来标识,但这个GPS没有键盘,只有4个方向键,中间是一个“accept”键,
 

当你准备输入一个名字时,光标一开始在字母“A”处,你可以通过方向键移动光标到你想要的位置,然后按下“accept”键,一旦你全部输完就必须把光标移到“enter”处再按下“accept”完成整个输入。

给你一个名字,计算出光标最少需要移动多少次。

 

输入

    输入包含一个长度不超过40的字符串,你可以假设所有字符都在键盘上能够找到(字母都是大写)。

输出

输出一个整数表示光标的移动次数。
很简单的模拟,从第一个点开始,最后一个点结束,每次加上坐标差就可以了

 

var
  a:array['A'..'Z',1..2] of integer;
  i,j,k,m,s,n,x,y:longint;
  st:ansistring;
begin
  assign(input,'j3.in'); reset(input);
  assign(output,'j3.out');rewrite(output);
  readln(st);
  j:=1; k:=1;
  for i:=1 to 26 do
    begin
      a[chr(ord('A')+i-1),1]:=j;
      a[chr(ord('A')+i-1),2]:=k;
      inc(k);
      if k>6 then
        begin
          k:=1;
          inc(j);
        end;
    end;
  x:=1; y:=1;
  for i:=1 to length(st) do
    begin
      if st[i] in ['A'..'Z'] then
        begin
          s:=s+abs(x-a[st[i],1])+abs(y-a[st[i],2]);
          x:=a[st[i],1];
          y:=a[st[i],2];
        end
      else if st[i]=' ' then
        begin
          s:=s+abs(x-5)+abs(y-3);
          x:=5; y:=3;
        end
       else if st[i]='-' then
        begin
          s:=s+abs(x-5)+abs(y-4);
          x:=5; y:=4;
        end
       else if st[i]='.' then
        begin
          s:=s+abs(x-5)+abs(y-5);
          x:=5; y:=5;
        end
    end;
  s:=s+abs(x-5)+abs(y-6);
  writeln(s);
end.

 

]]>