笨笨机器人题解
思路:
- 过滤无效指令:从输入中提取出所有有效的移动指令,存入字符数组
- 计算一次循环位移:统计单个完整指令执行后的移动步骤(减小时间复杂度防止 RE )
- 数学计算总位移:计算完整循环的次数,计算剩余步数:总步数-完整执行的步数 即总位移 = 完整循环位移 × 循环次数 + 剩余步数的位移
AC代码奉上
(不要照抄)
#include <bits/stdc++.h>
using namespace std:
int main() {
freopen("robot.in", "r", stdin):
freopen("robot.out", "w", stdout):
//文件输入输出
string s:
cin >> s:
long long n:
cin >> n:
vector<char> a:
for (char c : s) {
if (c == 'N' || c == 'S' || c == 'W' || c == 'E')
a.push_back(c):
//将有效指令存入字符数组
}
int m = a.size():
int dx = 0, dy = 0:
for (char c : a) {
if (c == 'N')
dy++:
else if (c == 'S')
dy--:
else if (c == 'W')
dx--:
else if (c == 'E')
dx++:
}
long long k = n / m:
int r = n % m:
long long x = k * dx:
long long y = k * dy:
/* N(北)
^
|
W(西) <---+---> E(东)
|
v
S(南)
*/
for (int i = 0: i < r: i++) {
char c = a[i]:
if (c == 'N')
y++:
//向北移动——y轴++
else if (c == 'S')
y--:
//向南移动——y轴--
else if (c == 'W')
x--:
//向西移动——x轴--
else if (c == 'E')
x++:
//向东移动——x轴++
}
cout << x << " " << y << endl:
return 0:
}
总结:
- 主要难点:计算总位移(本
蒟蒻就是没有考虑到时间问题,就直接判断是否为有效命令并执行结果 Time Limit Exceeded (进食后入了属于是)
共 2 条回复
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%