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