这道题是5506,是个模拟题,A操作先没有写,错的和M操作一样,就是68行注释掉的地方,题目说数据不超过100,我就想着循环200次,后来试了试不管数据是多少,第15个点都过不去,不知道逻辑上哪里出错了,换成while就过了,有没有老哥帮忙看看,xyz的范围也没有限制,就算for循环出现坐标绝对值超过100,但是后面还有判断,应该不会影响啊,
#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[5][8] = {0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 0, -1, -1, -1, 0, 1,
1, 1, 0, -1, -1, -1, 0, 1,
1, 1, 0, -1, -1, -1, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0};
int dy[5][8] = {0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, -1, -1, -1,
0, 1, 1, 1, 0, -1, -1, -1,
0, 1, 1, 1, 0, -1, -1, -1,
0, 0, 0, 0, 0, 0, 0, 0};
int dz[5][8] = {-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1};
int main() {
int n, t;
cin >> n >> t;
int x[N], y[N], z[N], h[N], f[N], atk[N], def[N], mat[N], mdf[N], hp[N], fix[N];
string op[N];
for (int i = 0; i < n; i++) {
cin >> x[i] >> y[i] >> z[i] >> h[i] >> f[i] >> atk[i] >> def[i] >> mat[i] >> mdf[i] >> hp[i] >> fix[i] >> op[i];
}
for (int j = 0; j < t; j++) {
for (int i = 0; i < n; i++) {
if (hp[i] <= 0) continue;
x[i] += dx[h[i]][f[i]];
y[i] += dy[h[i]][f[i]];
z[i] += dz[h[i]][f[i]];
}
for (int i = 0; i < n; i++) {
if (hp[i] <= 0) continue;
if (op[i][j] == 'N') continue;
else if (op[i][j] == 'U') {
if (h[i] < 4) h[i]++;
} else if (op[i][j] == 'D') {
if (h[i] > 0) h[i]--;
} else if (op[i][j] == 'L') {
if (f[i] < 7) f[i]++;
else f[i] = 0;
} else if (op[i][j] == 'R') {
if (f[i]) f[i]--;
else f[i] = 7;
} else if (op[i][j] == 'F') {
hp[i] += fix[i];
} else if (op[i][j] == 'A') {
;
} else {
int xx = x[i], yy = y[i], zz = z[i], hh = h[i], ff = f[i];
//for (int k = 0; k < 200; k++) {
while (abs(xx) < 200 && abs(yy) < 200 && abs(zz) < 200) {
xx += dx[hh][ff];
yy += dy[hh][ff];
zz += dz[hh][ff];
for (int kk = 0; kk < n; kk++) {
if (xx == x[kk] && yy == y[kk] && zz == z[kk]) {
if (mat[i] > mdf[kk]) hp[kk] -= mat[i] - mdf[kk];
}
}
}
}
}
}
for (int i = 0; i < n; i++) cout << x[i] << " " << y[i] << " " << z[i] << " " << max(0, hp[i]) << endl;
return 0;
}