3 条题解

  • 0
    @ 2025-11-27 21:10:15
    #include <bits/stdc++.h>
    #define int long long // 仅在需要大整数时使用,memset 数组为 0x3f 时去掉
    #define INF 0x3f3f3f3f
    #define PII pair<int, int>
    #define ULL unsigned long long
    #define PIII tuple<int, int, int>
    #define all(v) v.begin(), v.end()
    #define debug(a) cout << #a << " = " << a << endl;
    using namespace std;
    constexpr int N = 1 * 1e6 + 10, M = 50 + 10;
    
    char mp[M][M];
    bool st[M][M];
    int dir[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; //北0, 东1, 南2, 西3
    struct robot {
        int x, y, d;
        char p;
    }Robot[M];
    
    void solve() {
        int r, c, n, k;
        cin >> r >> c >> n;
        for (int i = 1; i <= r; i ++) {
            for (int j = 1; j <= c; j ++) {
                cin >> mp[i][j];
            }
        }
        for (int i = 1; i <= n; i ++) {
            auto &[x, y, d, p] = Robot[i];
            cin >> x >> y >> d;
            st[x][y] = 1;
            p = ' ';
        }
        cin >> k;
        int ok = 0;
        while (k --) {
            int id;
            char op[2];
            cin >> id >> op;
            auto &[x, y, d, p] = Robot[id];
            if (*op == 'D') {
                if (p == ' ' || mp[x][y] != '.') continue;
                mp[x][y] = p, p = ' ';
            } else if (*op == 'P') {
                if (p != ' ' || mp[x][y] == '.') continue;
                p = mp[x][y], mp[x][y] = '.';
            } else if (*op == 'L') {
                d = (d + 4 - 1) % 4;
            } else if (*op == 'R') {
                d = (d + 1) % 4;
            } else {
                int nx = x + dir[d][0], ny = y + dir[d][1];
                if (nx > r || nx <= 0 || ny > c || ny <= 0) continue;
                if (mp[nx][ny] == '#' ||st[nx][ny]) continue;
                st[x][y] = 0;
                st[nx][ny] = 1;
                x = nx, y = ny;
            }
            ok ++;
            
        }
        cout << ok << '\n';
        for (int i = 1; i <= r; i ++) {
            for (int j = 1; j <= c; j ++) {
                cout << mp[i][j];
            }
            cout << '\n';
        }
    }
    
    signed main() {
        ios::sync_with_stdio(0); cin.tie(nullptr), cout.tie(nullptr);
        int _ = 1;
        // cin >> _;
        while (_--) {
            solve();
        }
        return 0;
    }
    
    /**
     *    author: Nijika_jia
     *    description: C++17 Algorithm Template for Competitive Programming
     */
    
    

    信息

    ID
    5628
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    14
    已通过
    2
    上传者