8.13 美团笔试第二题

第二题算简单的模拟,分享一个比较简洁优雅的实现。
扫地机器人,按照指令移动,初始在(0,0),如果能扫完输出在指令的哪一步扫完,如果不能扫完输出还有几个格子没扫。

#include <bits/stdc++.h>

using namespace std;
using LL = long long;

bool isOK(set<int> &set, int n, int m) {
    return set.size() == n * m && *(set.begin()) == 0 && *(set.rbegin()) == n * m - 1;
}

int main() {
    freopen("test.txt", "r", stdin);
    ios::sync_with_stdio(false);
    int n, m, k;
    string s;
    cin >> n >> m >> k;
    cin >> s;
    if (n == 1 && m == 1) {
        cout << "Yes\n1";
        return 0;
    }
    set<int> set;
    set.insert(0);
    int i = 0, j = 0;
    bool flag = false;
    int idx = 0;
    for (; idx<s.size(); ++idx) {
        char c = s[idx];
        if (c == 'W') {
            set.insert((--i) * m + j);
        } else if (c == 'S') {
            set.insert((++i) * m + j);
        } else if (c == 'A') {
            set.insert(i * m + (--j));
        } else {
            set.insert(i * m + (++j));
        }
        flag = isOK(set, n ,m);
        if (flag) {
            break;
        }
    }
    if (flag) {
        cout << "Yes\n";
        cout << idx;
    } else {
        cout <<"No\n";
        cout << n*m - set.size();
    }
    return 0;
}



#美团笔试#
全部评论
这是第几面
点赞 回复 分享
发布于 2022-08-15 18:23

相关推荐

不愿透露姓名的神秘牛友
10-05 10:13
已编辑
HHHHaos:让这些老登来现在秋招一下,简历都过不去
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务