「CSP-J 2024」地图探险 题解 审核通过

CPP 刷题王 2024-11-17 15:23:52 4

啊啊啊,为什么题面这么 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;
}
{{ vote && vote.total.up }}