一道完全没有坑点难点的纯模拟,除了题面看起来挺长的,题意也很简单,看了洛谷的题解很多用了oop,很长
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define mk make_pair
#define sz(x) ((int) (x).size())
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
const int N = 105;
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
int main() {
int n, m;
cin >> n >> m;
string s[N];
for (int i = 0; i < n; i++) cin >> s[i];
int hp0, st0, de0;
cin >> hp0 >> st0 >> de0;
int x, y;
cin >> x >> y;
x--; y--;
int st, de;
cin >> st >> de;
int q;
cin >> q;
int hp = 0;
while (q--) {
int op;
cin >> op;
if (op == 1) {
cout << hp << " " << st << " " << de << endl;
} else {
int d;
cin >> d;
x += dx[d - 1];
y += dy[d - 1];
if (s[x][y] == 'R') hp = max(hp - 10, 0);
else if (s[x][y] == 'Q') st += 5;
else if (s[x][y] == 'Y') de += 5;
else if (s[x][y] == 'M') hp += max(1, (int) ceil(hp0 * 1.0 / max(1, st - de0)) * max(1, st0 - de));
}
}
return 0;
}