#P1548. 机器人行走功能

机器人行走功能

问题描述

给你一个在 XYXY 平面上的 width×heightwidth \times height 的网格图,左下角的格子为 (0,0)(0, 0),右上角的格子为 (width1,height1)(width - 1, height - 1)。网格图中相邻格子为四个基本方向之一 ("North","East","South" 和 "West")。一个机器人初始在格子 (0,0)(0, 0),方向为 "East"。机器人可以根据指令移动指定的步数。
每一步,它可以执行以下操作:

  • 沿着当前方向尝试往前一步。
  • 如果机器人下一步将到达的格子超出了边界, 机器人会逆时针转 90 90 度,然后再尝试往前一步。
  • 如果机器人完成了指令要求的移动步数,它将停止移动并等待下一个指令。

请你实现 机器人行走功能:

  • 可以定义各个函数 void Robot(int width, int height) 初始化一个 width×heightwidth \times height 的网格图,
    机器人初始在 (0,0)(0, 0),方向朝 "East"。
  • 定义一个前进函数 void step(int num),给机器人下达前进 num 步的指令。
  • 定义一个位置函数 vector<int> getPos(),返回机器人当前所处的格子位置,用长度为2的数组
    {x, y} 表示。
  • 定义一个方向函数 string getDir() 返回当前机器人的朝向,为 "North","East","South" 或者 "West"。

样例数据

6 3
9
step 2
step 2
getPos
getDir
step 2
step 1
step 4
getPos
getDir
4 0
East
1 2
West

样例解释

(6, 3); // 初始化网格图,机器人在(0, 0),朝东。
step(2);  // 机器人朝东移动 2 步,到达 (2, 0) ,并朝东。
step(2);  // 机器人朝东移动 2 步,到达 (4, 0) ,并朝东。
getPos(); // 返回 {4, 0}
getDir(); // 返回 "East"
step(2);  // 朝东移动 1 步到达 (5, 0) ,并朝东。
                // 下一步继续往东移动将出界,所以逆时针转变方向朝北。
                // 然后,往北移动 1 步到达 (5, 1) ,并朝北。
step(1);  // 朝北移动 1 步到达 (5, 2) ,并朝 北 (不是朝西)。
step(4);  // 下一步继续往北移动将出界,所以逆时针转变方向朝西。然后移动 4 步到 (1, 2) ,并朝西。
getPos(); // 返回 {1,2}
getDir(); // 返回 "West"

数据范围

2width,height100 2 \leq width, height \leq 100 1num105 1 \leq num \leq 10^5
stepgetPosgetDir 总共调用次数不超过 104 10^4 次。