题解:#6364.笨笨机器人 审核通过

gouzihenbugoulxh CSP-J2二等 2025-08-10 17:02:58 19

笨笨机器人题解

思路:

  1. 过滤无效指令:从输入中提取出所有有效的移动指令,存入字符数组
  2. 计算一次循环位移:统计单个完整指令执行后的移动步骤(减小时间复杂度防止 RE
  3. 数学计算总位移:计算完整循环的次数,计算剩余步数:总步数-完整执行的步数 即总位移 = 完整循环位移 × 循环次数 + 剩余步数的位移

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:
}

总结:

  1. 主要难点:计算总位移(本 蒟蒻 就是没有考虑到时间问题,就直接判断是否为有效命令并执行结果 Time Limit Exceeded ( 进食后入了属于是 )
{{ vote && vote.total.up }}

共 2 条回复

lhy263

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

gouzihenbugoulxh CSP-J2二等

%%%