啊啊啊,为什么题面这么 shit,看着头好晕啊!!!
为什么考场上我一点也不头晕,啊啊啊,脑子炸掉啦!!!
解题思路
没错,良心的 CCF 又来考我们的阅读能力了。让我们大喊:I Love CCF!
这题其实没那么恶心。
题目大意
有一个叫做 CFF 的机器人,他初始位置为 ,面朝方向为 。
其中 分别代表面朝东、南、西、北。
现在他可以在一个大小为 的地图里进行 次操作。
这个地图上有两种地形,一种是空地 ,一种是墙壁 。
每次操作它都会先尝试向前走一步(当前方向),如果向前走一步是墙壁,那么他就会按照东、南、西、北的顺序改变一次方向,也就是 。如果向前走一步是空地,那么他就会向前走一步。
问执行完所有操作后机器人走到过多少个地方?
然后我们模拟就行了。
CODE:
#include <bits/stdc++.h>
using namespace std;
char a[1010][1010];
int dx[] = { 0, 1, 0, -1 };
int dy[] = { 1, 0, -1, 0 };
bool vis[1010][1010];
int main() {
ios::sync_with_stdio(false);
ios_base::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t;
cin >> t;
while (t--) {
int n, m, k;
cin >> n >> m >> k;
int x0, y0, d;
cin >> x0 >> y0 >> d;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j], vis[i][j] = 0;
}
}
vis[x0][y0] = 1;
int ans = 1;
while (k--) {
int xx = x0 + dx[d];
int yy = y0 + dy[d];
if (xx >= 1 && xx <= n && yy >= 1 && yy <= m && a[xx][yy] == '.') {
x0 = xx, y0 = yy;
if (!vis[xx][yy]) {
ans++;
}
vis[xx][yy] = 1;
} else {
d = (d + 1) % 4;
}
}
cout << ans << "\n";
}
return 0;
}