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; }#美团笔试#