SRM 570 Div2 Medium RobotHerbDiv2

問題

配列aが与えられた時二次元平面上を以下の手順で移動する.移動開始位置と,移動終わり位置のマンハッタン距離を返す問題.

  • 今向いている方向へa[i]だけ前に進む
  • 90度右に回転する,をa[i]回行う
  • a[0]からa[|a|-1]を1セットとして,合計Tセット行う

解答

シミュレーションするだけ

class RobotHerbDiv2
{
public:
  int getdist(int T, vector <int> a)
    {
      int dx[4] = {1, 0, -1, 0};
      int dy[4] = {0, -1, 0, 1};
      int i, j;
      int n = a.size();
      int dir = 0;
      int x = 0;
      int y = 0;
      // cout << endl;
      for(i = 0; i < T; i++){
        for(j = 0; j < n; j++){
          x += dx[dir] * a[j];
          y += dy[dir] * a[j];
          dir = (dir + a[j]) % 4;
        }
      }
      return abs(x) + abs(y);
    }
};