激光操作,我就是用的那种暴力的思路,激光往前走一格,遍历所有的飞机,看看是不是就飞机在激光的点上,但是这里用的for循环第15个点就是错的,用的while第15个点就是对的,有没有老哥帮忙看看哪里逻辑出现了错误
#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 < 100; 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;
}