大佬求条大大大模拟(加了注释防止自己看不懂)
查看原帖
大佬求条大大大模拟(加了注释防止自己看不懂)
1047397
a18602930307楼主2025/7/24 14:34
#include<bits/stdc++.h>
using namespace std;
int n;
int ans=0,sum=0;//回合数,buff数 
struct ren{//角色 
	int HP,hp;//血量,上限血量
	int MP,mp;//能量,能量上限
	int akt,zatk;//基础攻击力,攻击力增益
	int def,zdef;//基础防御力,防御力增益
	int talent,tx,ty;//天赋,天赋参数
	int skill,sx,sy,sz;//技能,技能参数
	int p,id;//优先攻击目标,所属阵营
	bool die;//是否死亡
	int pr[11];//优先攻击顺序
};
struct dui{//团队
    ren ra[11];//团队角色
	int num;//队伍剩余人数
	
}t[3];
struct tt{
	int id,d,x,y,z;//编号,队伍,buff时间开头,结尾,增加量 
}buff[50100];//buff增益
bool qus(){//是否有输赢 
    if(!t[1].num||t[2].num)return 0;
	return 1;
}
void shanghai(int l,int r,int d,int x,int y){//减少生命 
	for(int i=l;i<=r;i++){
		if(!t[d].ra[i].die){
		    t[d].ra[i].MP++;
	    	if(t[d].ra[i].talent==1)t[d].ra[i].HP-=(max(x-max(t[d].ra[i].def+t[d].ra[i].zdef,0),0)+y-y/2); 
	    	if(t[d].ra[i].talent!=1)t[d].ra[i].HP-=(max(x-max(t[d].ra[i].def+t[d].ra[i].zdef,0),0)+y);
	        if(t[d].ra[i].HP<=0){
	        	t[d].ra[i].HP=0;
	        	t[d].ra[i].die=1;
	        	t[d].num-=1;
		    }
		}
	}
}
void jineng(int j,int d){//发动技能 
	t[d].ra[j].MP=0;
	int bian=t[d].ra[j].skill;
	if(bian==0)return;//0.心态崩了!
	else if(bian==1){//1.格林炸裂!
		if(d==1){
			shanghai(1,n,2,t[d].ra[j].sx,0);
			for(int i=1;i<=n;i++){
				t[2].ra[j].MP-=t[2].ra[j].MP/10;
				if(t[2].ra[j].MP<0)t[2].ra[j].MP==0;
			}
		}
		if(d==2){
			shanghai(1,n,2,t[d].ra[j].sx,0);
			for(int i=1;i<=n;i++){
				t[1].ra[j].MP-=t[1].ra[j].MP/10;
				if(t[1].ra[j].MP<0)t[1].ra[j].MP==0;
			}
		}
	} 
	else if(bian==2){//2.日 (zhou) 昇 (ji) 之 (dao) 雨 (dan)!!
	    if(d==1)shanghai(1,n,2,0,max(t[d].ra[j].akt+t[d].ra[j].zatk,1));
		if(d==2)shanghai(1,n,1,0,max(t[d].ra[j].akt+t[d].ra[j].zatk,1));
	}
	else if(bian==3){//3.天楼霸断剑!
		if(d==1)for(int i=1;i<=n;i++){if(!t[2].ra[t[d].ra[j].pr[i]].die)shanghai(t[d].ra[j].pr[i],t[d].ra[j].pr[i],2,min(t[2].ra[j].hp/10,t[d].ra[j].sx*max(t[d].ra[j].akt+t[d].ra[j].zatk,1)),0);break;}
		if(d==2)for(int i=1;i<=n;i++){if(!t[1].ra[t[d].ra[j].pr[i]].die)shanghai(t[d].ra[j].pr[i],t[d].ra[j].pr[i],2,min(t[1].ra[j].hp/10,t[d].ra[j].sx*max(t[d].ra[j].akt+t[d].ra[j].zatk,1)),0);break;}
	}
	else if(bian==4){//4.演出开始!
	    sum++;
		buff[sum].id=1;
		buff[sum].x=ans;
		buff[sum].y=ans+t[d].ra[j].sx-1;
		buff[sum].z=t[d].ra[j].sy;
		buff[sum].d=d;
	}
	else if(bian==5){//5.天狼噬斩!
		if(d==1){
			for(int i=1;i<=n;i++){
				if(!t[2].ra[t[d].ra[j].pr[i]].die){
					t[2].ra[t[d].ra[j].pr[i]].zdef-=t[d].ra[j].sx;
					if(t[2].ra[t[d].ra[j].pr[i]].zdef<0)t[2].ra[t[d].ra[j].pr[i]].zdef=0;
				    shanghai(i,i,2,0,max(t[d].ra[j].akt+t[d].ra[j].zatk,1));
				    break;
				}
			}
			
		}
		if(d==2){
			for(int i=1;i<=n;i++){
				if(!t[1].ra[t[d].ra[j].pr[i]].die){
					t[1].ra[t[d].ra[j].pr[i]].zdef-=t[d].ra[j].sx;
					if(t[1].ra[t[d].ra[j].pr[i]].zdef<0)t[1].ra[t[d].ra[j].pr[i]].zdef=0;
				    shanghai(i,i,1,0,max(t[d].ra[j].akt+t[d].ra[j].zatk,1));
				    break;
				}
			}
			
		}
	}
	else if(bian==6){//6.地 (太) 球 (虚) 蓝 (苍) 色 (蓝) 闪 (闪) 电!
		if(d==1){
			for(int i=1;i<=n;i++){if(!t[2].ra[t[d].ra[j].pr[i]].die)shanghai(i,i,2,0,max(t[d].ra[j].akt+t[d].ra[j].zatk,1));break;}
		    sum++;
		    buff[sum].id=2;
		    buff[sum].x=ans;
		    buff[sum].y=ans+t[d].ra[j].sx-1;
		    buff[sum].z=t[d].ra[j].sy;
		    buff[sum].d=d;
		}
		if(d==2){
			for(int i=1;i<=n;i++){if(!t[1].ra[t[d].ra[j].pr[i]].die)shanghai(i,i,1,0,max(t[d].ra[j].akt+t[d].ra[j].zatk,1));break;}
		    sum++;
		    buff[sum].id=2;
		    buff[sum].x=ans;
		    buff[sum].y=ans+t[d].ra[j].sx-1;
		    buff[sum].z=t[d].ra[j].sy;
		    buff[sum].d=d;
		}
	}
	else if(bian==7){//7.极光绽放!
	    int minn=1;
		for(int i=2;i<=n;i++){
			if(!t[d].ra[i].die){
				if(t[d].ra[i].HP<t[d].ra[minn].HP)minn=i;
				else if(t[d].ra[i].HP<t[d].ra[minn].HP){
					if(i<minn)minn=i;
				}
			}
		}
		t[d].ra[minn].HP+=t[d].ra[j].sz;
		if(t[d].ra[minn].HP>t[d].ra[minn].hp)t[d].ra[minn].HP=t[d].ra[minn].hp;
		sum++;
		buff[sum].id=3;
		buff[sum].x=ans;
		buff[sum].y=ans+t[d].ra[j].sx-1;
		buff[sum].z=t[d].ra[j].sy;
		buff[sum].d=d;
	}
	else if(bian==8){//8.流星!
		if(d==1)shanghai(1,n,2,max(t[d].ra[j].akt+t[d].ra[j].zatk,1),0);
		if(d==2)shanghai(1,n,1,max(t[d].ra[j].akt+t[d].ra[j].zatk,1),0);
		sum++;
		buff[sum].id=4;
		buff[sum].x=ans;
		buff[sum].y=ans+t[d].ra[j].sx-1;
		buff[sum].z=t[d].ra[j].sy;
		buff[sum].d=d;
	}
	else if(bian==9){//9.精灵庇护!
		for(int i=1;i<=n;i++){
			t[d].ra[i].HP+=t[d].ra[i].sz;
			if(t[d].ra[i].HP>t[d].ra[i].hp)t[d].ra[i].HP=t[d].ra[i].hp;
		}
		sum++;
		buff[sum].id=5;
		buff[sum].x=ans;
		buff[sum].y=ans+t[d].ra[j].sx-1;
		buff[sum].z=t[d].ra[j].sy;
		buff[sum].d=d;
	}
	else if(bian==10){//10.全力超全开!轮回之终末!
		for(int i=1;i<=n;i++){
			t[d].ra[i].akt*=2;t[d].ra[i].def*=2;
			t[d].ra[i].MP=max(t[d].ra[i].mp/2,t[d].ra[i].MP);
			t[d].ra[i].HP=max(t[d].ra[i].hp/2,t[d].ra[i].HP);
		}
		sum++;
		buff[sum].id=6;
		buff[sum].x=ans;
		buff[sum].y=ans+t[d].ra[j].sx-1;
		buff[sum].z=t[d].ra[j].sy;
		buff[sum].d=d;
		for(int i=1;i<=n;i++)if(t[d].ra[i].skill==10)t[d].ra[i].skill=0;
	}
} 
int jisuan(int j,int d,int dj){//计算伤害 
	int oo=0,maxx;
	if(d==1)oo=2;
	if(d==2)oo=1;
	if(t[d].ra[j].talent==2){
		maxx=max(max(t[d].ra[j].akt+t[d].ra[j].zatk,1)-max(t[d].ra[j].def+t[d].ra[j].zdef,0),0)+t[d].ra[j].tx;
		if(t[oo].ra[dj].talent==1)maxx-=t[d].ra[j].tx/2;
	}
	else if(t[d].ra[j].talent==4){
		maxx=max(t[d].ra[j].akt+t[d].ra[j].zatk,1);
		if(t[oo].ra[dj].talent==1)maxx-=max(t[d].ra[j].akt+t[d].ra[j].zatk,1)/2;
	}else{
		maxx=max(max(t[d].ra[j].akt+t[d].ra[j].zatk,1)-max(t[d].ra[j].def+t[d].ra[j].zdef,0),0);
	}
	return maxx;
}
int main(){
	//输入 
	cin>>n;
	for(int k=1;k<=2;k++){
		t[k].num=n;
		for(int i=1;i<=n;i++){
			cin>>t[k].ra[i].hp>>t[k].ra[i].mp>>t[k].ra[i].akt>>t[k].ra[i].def;
		    for(int o=1;o<=n;o++)cin>>t[k].ra[i].pr[o];
			cin>>t[k].ra[i].talent>>t[k].ra[i].tx>>t[k].ra[i].ty;
		    cin>>t[k].ra[i].skill>>t[k].ra[i].sx>>t[k].ra[i].sy>>t[k].ra[i].sz;
		}
	}
	while(qus()){//回合 
	    ans++;//回合++ 
	    for(int k=1;k<=2;k++){//Alice与Bob行动 
		    int oo=0;
	    	if(k==1)oo=2;
	    	if(k==2)oo=1;
	        int jeuse[20];
	    	bool a=0;
	    	for(int i=1;i<=n;i++){
	    		if(t[k].ra[i].mp==t[k].ra[i].MP && !t[k].ra[i].die)a=1;
	    	}
	    	if(a){//有技能
			    //找最适合的人 
	    		int shu=0;
	    		for(int i=1;i<=n;i++){
	    			if(t[k].ra[i].mp==t[k].ra[i].MP && !t[k].ra[i].die){
	    				shu++;
	    				jeuse[shu]=i;
	    			}
	    		}
	    		int youxian=jeuse[1];
	    		for(int i=2;i<=shu;i++){
	    			if(t[k].ra[jeuse[i]].skill>t[k].ra[youxian].skill)youxian=jeuse[i];
	    			else if(t[k].ra[jeuse[i]].skill==t[k].ra[youxian].skill){
	    				if(jeuse[i]>youxian)youxian=jeuse[i];
	    			}
	    		}
	    		jineng(youxian,1);
	    		if(t[k].ra[youxian].talent==5&&t[oo].num!=0){
	    			t[k].ra[youxian].MP+=t[k].ra[youxian].ty;
	    			if(t[k].ra[youxian].MP>t[k].ra[youxian].mp)t[k].ra[youxian].MP=t[k].ra[youxian].mp;
				}
	    	}else{//无技能 
	    	    //找最适合的人 
			    int maxx=1,maxxd=0;
	    	    for(int i=1;i<=n;i++){
	    	    	if(!t[oo].ra[t[k].ra[1].pr[i]].die){
	    	    		maxxd=t[k].ra[1].pr[i];
	    	    		break;
					}
				}
				//算造成伤害大小 
			    for(int o=2;o<=n;o++){
			    	for(int i=1;i<=n;i++){
			    		if(!t[oo].ra[t[k].ra[o].pr[i]].die){
			    			if(t[oo].ra[t[k].ra[o].pr[i]].HP>maxxd){
			    				maxxd=t[k].ra[o].pr[i];
			    				maxx=o;
							}
					    }
					}
				}
				int v[20],sum=1;
				v[1]=maxx;
				for(int o=2;o<=n;o++){
			    	for(int i=1;i<=n;i++){
			    		if(t[oo].ra[t[k].ra[o].pr[i]].HP==t[oo].ra[maxxd].HP){
			    			sum++;
							v[sum]=t[k].ra[o].pr[i];
						}
					}
				}
				if(sum>1){//二次找人 
				    int maxxx=sum;
					for(int o=sum-1;o>=1;o--){
						if(jisuan(v[o],k,maxxd)>jisuan(v[maxxx],k,maxxd)){
							maxxx=o;
						}
					}
					if(t[k].ra[maxxx].talent==2)shanghai(maxxd,maxxd,k,t[k].ra[maxxx].akt,t[k].ra[maxxx].tx);
					if(t[k].ra[maxxx].talent==4)shanghai(maxxd,maxxd,k,0,t[k].ra[maxxx].akt+t[k].ra[maxxx].zatk);
					if(t[k].ra[maxxx].talent==0||t[k].ra[maxxx].talent==1||t[k].ra[maxxx].talent==3||t[k].ra[maxxx].talent==5)shanghai(maxxd,maxxd,k,t[k].ra[maxxx].akt,0);
					if(t[k].ra[maxxx].talent==5){
						t[k].ra[maxxx].HP+=t[k].ra[maxxx].tx;
						if(t[k].ra[maxxx].HP>t[k].ra[maxxx].hp)t[k].ra[maxxx].HP=t[k].ra[maxxx].hp;
					}
				}else{
					if(t[k].ra[maxx].talent==2)shanghai(maxxd,maxxd,k,t[k].ra[maxx].akt,t[k].ra[maxx].tx);
					if(t[k].ra[maxx].talent==4)shanghai(maxxd,maxxd,k,0,t[k].ra[maxx].akt+t[k].ra[maxx].zatk);
					if(t[k].ra[maxx].talent==0||t[k].ra[maxx].talent==1||t[k].ra[maxx].talent==3||t[k].ra[maxx].talent==5)shanghai(maxxd,maxxd,k,t[k].ra[maxx].akt,0);
					if(t[k].ra[maxx].talent==5){
						t[k].ra[maxx].HP+=t[k].ra[maxx].tx;
						if(t[k].ra[maxx].HP>t[k].ra[maxx].hp)t[k].ra[maxx].HP=t[k].ra[maxx].hp;
					}
					
				}
				
	    	}
	    	//行动结束,开始加buff 
			for(int i=1;i<=sum;i++){
				if(buff[i].id==1){//4.的buff 
					if(buff[i].x<=ans&&buff[i].y>=ans){
						for(int o=1;o<=n;o++){
							if(!t[k].ra[o].die){
								t[k].ra[o].MP+=buff[i].z;
								if(t[k].ra[o].MP>t[k].ra[o].mp)t[k].ra[o].MP=t[k].ra[o].mp;
							}
						}
					}
				}
				if(buff[i].id==2){//6.的buff 
					if(buff[i].x<=ans&&buff[i].y>=ans){
						for(int o=1;o<=n;o++){
							int oo=0;
							if(k==1)oo=2;
							if(k==2)oo=1;
							if(!t[oo].ra[o].die){
								t[oo].ra[o].zatk-=buff[i].z;
								if(t[oo].ra[o].zatk<0)t[oo].ra[o].zatk=0;
							}
						}
					}
				}
				if(buff[i].id==3){//7.的buff 
					if(buff[i].x<=ans&&buff[i].y>=ans){
						for(int o=1;o<=n;o++){
							if(!t[k].ra[o].die){
								t[k].ra[o].zatk+=buff[i].z;
							}
						}
					}
				}
				if(buff[i].id==4){//8.的buff 
					if(buff[i].x<=ans&&buff[i].y>=ans){
						for(int o=1;o<=n;o++){
							int oo=0;
							if(k==1)oo=2;
							if(k==2)oo=1;
							if(!t[oo].ra[o].die){
								t[oo].ra[o].zdef-=buff[i].z;
								if(t[oo].ra[o].zdef<0)t[oo].ra[o].zdef=0;
							}
						}
					}
				}
				if(buff[i].id==5){//9.的buff 
					if(buff[i].x<=ans&&buff[i].y>=ans){
						for(int o=1;o<=n;o++){
							if(!t[k].ra[o].die){
								t[k].ra[o].zdef+=buff[i].z;
							}
						}
					}
				}
				if(buff[i].id==6){//10.的buff 
					if(buff[i].x<=ans&&buff[i].y>=ans){
						for(int o=1;o<=n;o++){
							t[k].ra[o].MP+=buff[i].z;
							if(t[k].ra[o].MP>t[k].ra[o].mp)t[k].ra[o].MP=t[k].ra[o].mp;
						}
					}
				}
				if(buff[i].id==6){//最后的挣扎,全队趋势 
					if(buff[i].y<ans){
						for(int o=1;o<=n;o++){
							t[k].ra[o].die=1;
						}
						t[k].num=0;
					}
				}
				for(int o=1;o<=n;o++){//天赋3:心胜于物
					if(t[k].ra[o].talent==3){
						t[k].ra[o].HP+=t[k].ra[o].tx;
						t[k].ra[o].MP+=t[k].ra[o].ty;
						if(t[k].ra[o].HP>t[k].ra[o].hp)t[k].ra[o].HP=t[k].ra[o].hp;
						if(t[k].ra[o].MP>t[k].ra[o].mp)t[k].ra[o].MP=t[k].ra[o].mp;
					}
				}
			} 
	    }
	}
	//输出 
	cout<<ans<<'\n';
	if(t[1].num==0){
		cout<<"Bob"<<'\n';
		for(int i=1;i<=n;i++){
			if(t[2].ra[i].die)cout<<0<<" ";
			else cout<<t[2].ra[i].HP<<" ";
		}
	}else{
	    cout<<"Alice"<<'\n';
		for(int i=1;i<=n;i++){
		    if(t[1].ra[i].die)cout<<0<<" ";
		    else cout<<t[1].ra[i].HP<<" ";
		}
	}
	return 0;
}
2025/7/24 14:34
加载中...