81分,求救
  • 板块P5506 封锁
  • 楼主hexuchen
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/19 15:35
  • 上次更新2025/1/19 18:02:40
查看原帖
81分,求救
945742
hexuchen楼主2025/1/19 15:35

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;
}
2025/1/19 15:35
加载中...