3 条题解
-
0
#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
- 上传者