rt,内有注释
#include <bits/stdc++.h>
using namespace std;
int n,t,x[1001],y[1001],z[1001];
int h[1001],atk[10001],def[1001];
int mat[1001],mdf[1001],hp[1001];
int fix[1001],f[1001],isdied[1001];
char c[1001][1001];
int dh[8][5]={
0,1,1,1,0,
0,1,1,1,0,
0,0,0,0,0,
0,-1,-1,-1,0,
0,-1,-1,-1,0,
0,-1,-1,-1,0,
0,0,0,0,0,
0,1,1,1,0
};
int dl[8][5]={
0,0,0,0,0,
0,1,1,1,0,
0,1,1,1,0,
0,1,1,1,0,
0,0,0,0,0,
0,-1,-1,-1,0,
0,-1,-1,-1,0,
0,-1,-1,-1,0
};
int dg[8][5]={
-1,-1,0,1,1,
-1,-1,0,1,1,
-1,-1,0,1,1,
-1,-1,0,1,1,
-1,-1,0,1,1,
-1,-1,0,1,1,
-1,-1,0,1,1,
-1,-1,0,1,1
};
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>t;
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i]>>z[i]>>h[i];
cin>>f[i]>>atk[i]>>def[i];
cin>>mat[i]>>mdf[i]>>hp[i];
cin>>fix[i];
for(int j=1;j<=t;j++){
cin>>c[i][j];
}
}
for(int i=1;i<=t;i++){
for(int j=1;j<=n;j++){
if(isdied[j]){
continue;
}
x[j]+=dh[f[j]][h[j]];
y[j]+=dl[f[j]][h[j]];
z[j]+=dg[f[j]][h[j]];
if(c[j][i]=='N'){
continue;
}
else if(c[j][i]=='U'){
if(h[j]<4){
h[j]++;
}
}
else if(c[j][i]=='D'){
if(h[j]>0){
h[j]--;
}
}
else if(c[j][i]=='L'){
f[j]++;
if(f[j]==8){
f[j]=0;
}
}
else if(c[j][i]=='R'){
f[j]--;
if(f[j]==-1){
f[j]=7;
}
}
else if(c[j][i]=='F'){
hp[j]+=fix[j];
}
else if(c[j][i]=='A'){
int hh=x[j],ll=y[j],gg=z[j],num=0;
while(true){
num++;
if(num>=1000){
break;
}
hh+=dh[f[j]][h[j]];
ll+=dl[f[j]][h[j]];
gg+=dg[f[j]][h[j]];
bool flag=false;
for(int k=1;k<=n;k++){
if(x[k]==hh && y[k]==ll && z[k]==gg && !isdied[k]){
int damage=atk[j]-def[k];
if(damage>0){
hp[k]-=damage;
if(hp[k]<=0){
isdied[k]=1;
hp[k]=0;
}
}
flag=true;
break;
}
}
if(flag){
break;
}
}
}
else if(c[j][i]=='M'){ //错误点应该在这
int hh=x[j],ll=y[j],gg=z[j],num=0; //激光的坐标
while(true){
num++;
if(num>=1000){ //卡数据
break;
}
hh+=dh[f[j]][h[j]]; //激光移动
ll+=dl[f[j]][h[j]];
gg+=dg[f[j]][h[j]];
for(int k=1;k<=n;k++){
if(x[k]==hh && y[k]==ll && z[k]==gg && !isdied[k]){ //击中无人机
int damage=mat[j]-mdf[k];
if(damage>0){
hp[k]-=damage;
if(hp[k]<=0){
isdied[k]=1;
hp[k]=0;
}
}
}
}
}
}
}
/*for(int i=1;i<=n;i++){
cout<<hp[i]<<' ';
}
cout<<endl;*/
}
for(int i=1;i<=n;i++){
cout<<x[i]<<' '<<y[i]<<' '<<z[i]<<' '<<hp[i]<<'\n';
}
return 0;
}