代码跪求调
查看原帖
代码跪求调
443649
NATO楼主2022/7/7 16:56
#include<bits/stdc++.h> 
#define ll int
using namespace std;
ll n;
struct play_er
{
	ll HP,MP,atk,def,hp,mp,atk_more,def_more,tar;
	ll p[15];
	ll tf,x_t,y_t;
	ll jn,x_g,y_g,z_g;
	ll end[1005],cnt;
}job[25],dy;
bool die[25];
ll i1;
ll A(ll id)
{
	return max(job[id].atk+job[id].atk_more,1);
}
ll D(ll id)
{
	return max(job[id].def+job[id].def_more,1);
}
void nothing(ll id)
{
	job[id]=dy;
}
void qs(bool winner)//死亡清算 
{
	cout<<i1<<'\n';
	if(winner==0)
	{
		cout<<"Alice\n";
		for(ll i=1;i<=n;++i)
			if(!die[i])
			cout<<job[i].hp<<' ';
			else
			cout<<0<<' ';
	}
	else
	{
		cout<<"Bob\n";
		for(ll i=n+1;i<=2*n;++i)
		if(!die[i])
			cout<<job[i].hp<<' ';
		else
			cout<<0<<' ';
	}
	exit(0);
}
void gl(ll id,ll x,ll y)//血量扣除 (群体) 
{
	ll to=1,end=n;
	if(id<=n)
		to+=n,end+=n;
	for(ll i=to;i<=end;++i)
	{
		if(die[i])
			continue;
		if(job[i].tf==1)
			job[i].hp-=(max(0,x-D(i))+y-y/2);
		else
			job[i].hp-=(max(0,x-D(i))+y);
		++job[i].mp;
		if(job[i].mp>job[i].MP)
			job[i].mp=job[i].MP;
		if(job[i].hp<=0)
			die[i]=1,nothing(i);
	}
	bool flag=1;
	for(ll i=to;i<=end;++i)	
		if(!die[i])
			flag=0;
	if(flag)
	{
		if(to==n+1)
			qs(0);
		else 
			qs(1);
	}
	
}
void gl_g(ll to,ll x,ll y) //血量扣除 (个体) 
{
	//cout<<(max(0,x-max(job[to].def+job[to].def_more,0))+y-y/2)<<"_____________________\n";
	if(job[to].tf==1)
			job[to].hp-=(max(0,x-D(to))+y-y/2);
		else
			job[to].hp-=(max(0,x-D(to))+y);
		++job[to].mp;
		if(job[to].mp>job[to].MP)
			job[to].mp=job[to].MP;
		if(job[to].hp<=0)
			die[to]=1,nothing(to);
	bool flag=1;
	ll ts=1,end=n;
	if(to>n)
		ts+=n,end+=n;
	for(ll i=ts;i<=end;++i)	
		if(!die[i])
			flag=0;
	if(flag)
	{
		if(ts==n+1)
			qs(0);
		else 
			qs(1);
	}
}
ll mn_g(ll to,ll x,ll y) 
{
	if(job[to].tf==1)
		return (max(0,x-D(to))+y-y/2);
	else
		return (max(0,x-D(to))+y);
}
void bur(ll id,ll to,ll end)//1
{
	gl(id,job[id].x_g,0);
	for(ll i=to;i<=end;++i)
	{
		if(!die[i])
		{
		job[i].mp-=(job[id].MP/10);
		job[i].mp=max(0,job[i].mp);	
		}
	}
}
void inmi(ll id)//2
{
	gl(id,0,A(id)); 
}
void sword(ll id,ll it,ll end)//3
{
	for(ll i=it;i<=end;++i)
	if(!die[i])
	gl_g(i,min(job[i].HP/10,A(id)*job[id].x_g),0);
}
void shtst(ll id,ll time)//4
{
	job[id].end[++job[id].cnt]=time+job[id].x_g;
}
void dwetc(ll id)//5
{
	job[job[id].tar].def_more-=job[id].x_g;
	gl_g(job[id].tar,0,A(id));
}
void pabl(ll id,ll time)//6
{
	gl_g(job[id].tar,0,A(id));
	job[id].end[++job[id].cnt]=time+job[id].x_g;
	ll to=1,end=n;
	if(id<=n)
		to+=n,end+=n;
	for(ll i=to;i<=end;++i)
	{
		if(die[i])
		continue;
		job[i].atk_more-=job[id].y_g;
	}
		
}
void thabl(ll id,ll it,ll end,ll time)//7
{
	ll minn=214700000,idm=0;
	for(ll i=it;i<=end;++i)
	{
		if(die[i])
			continue;
		if(job[i].hp<minn)
			minn=job[i].hp,idm=i;
		job[i].atk_more+=job[id].y_g;
	}
	job[idm].hp+=job[id].z_g;
	if(job[idm].hp>job[idm].HP)
		job[idm].hp=job[idm].HP;
	job[id].end[++job[id].cnt]=time+job[id].x_g;
}
void ashst(ll id,ll to,ll end,ll when)//8
{
	gl(id,A(id),0);
	for(ll i=to;i<=end;++i)
	{
		if(die[i])
		continue;job[i].def_more-=job[i].y_g;
	}
		
	job[id].end[++job[id].cnt]=when+job[id].x_g;
}
void asyel(ll id,ll it,ll end,ll when)//9
{
	for(ll i=it;i<=end;++i)
	{
		if(die[i])
		continue;
		job[i].hp+=job[id].z_g;
		if(job[i].hp>job[i].HP)
			job[i].hp=job[i].HP;
		job[i].def_more+=job[id].y_g;
	}
	job[id].end[++job[id].cnt]=when+job[id].x_g;
}
void sfotr(ll id,ll to,ll end,ll time)//10
{
	for(ll i=to;i<=end;++i)
	{
		if(die[i])
		continue;
		job[i].atk*=2;
		job[i].def*=2;
		job[i].hp=max(job[i].hp,job[i].HP/2);
		job[i].mp=max(job[i].mp,job[i].MP/2);
	}
	job[id].end[++job[id].cnt]=time+job[id].x_g;
	for(ll i=1;i<=2*n;++i)
		if(job[id].jn==10)
			job[id].jn=0;
}
void t_use(ll id,ll t,bool ab,ll when)
{
	ll it=1,end=n,itt=1,endd=n;
	if(!ab)
		it+=n,end+=n;
	else
		itt+=n,endd+=n;	
	if(t==0)
		return;		
	if(t==1)
		bur(id,it,end);
	else if(t==2)
		inmi(id);
	else if(t==3)
		sword(id,it,end);
	else if(t==4)
		shtst(id,when);
	else if(t==5)
		dwetc(id);
	else if(t==6)
		pabl(id,when);
	else if(t==7)
		thabl(id,itt,endd,when);
	else if(t==8)
		ashst(id,it,end,when);
	else if(t==9)
		asyel(id,itt,endd,when);
	else
		sfotr(id,itt,endd,when);
} 
void or_att(ll id)
{
	ll hurt=max(job[id].atk+job[id].atk_more,1);
	//cout<<id<<' '<<hurt<<"+++++++++++\n";
	if(job[id].tf==2)
		gl_g(job[id].tar,A(id),job[id].x_t);
	else if(job[id].tf==4)
		gl_g(job[id].tar,0,A(id));
	else 
		gl_g(job[id].tar,A(id),0);
}
ll mn_att(ll id)
{
	if(job[id].tf==2)
		return mn_g(job[id].tar,A(id),job[id].x_t);
	else if(job[id].tf==4)
		return mn_g(job[id].tar,0,A(id));
	else 
		return mn_g(job[id].tar,A(id),0);
}
void find_tar(ll id)
{
	for(ll i=1;i<=n;++i)
		if(!die[job[id].p[i]])
		{
		job[id].tar=job[id].p[i];return;	
		}
}
void end_pabl(ll id)
{
	ll it=1,end=n;
	if(id<=n)
		it+=n,end+=n;
	for(ll i=it;i<=end;++i)
		job[i].atk_more+=job[id].y_g;
}
void end_thabl(ll id)
{
	ll it=1,end=n;
	if(id>n)
		it+=n,end+=n;
	for(ll i=it;i<=end;++i)
		job[i].atk_more-=job[id].y_g;
}
void end_ashst(ll id)
{
	ll it=1,end=n;
	if(id<=n)
		it+=n,end+=n;
	for(ll i=it;i<=end;++i)
		job[i].def_more+=job[id].y_g;
}
void end_asyel(ll id)
{
	ll it=1,end=n;
	if(id>n)
		it+=n,end+=n;
	for(ll i=it;i<=end;++i)
		job[i].def_more-=job[id].y_g;
}
int main()
{
	ios::sync_with_stdio(0);
	cin>>n;
	for(ll i=1;i<=n;++i)
	{
		cin>>job[i].HP>>job[i].MP>>job[i].atk>>job[i].def;
		job[i].hp=job[i].HP;
		for(ll j=1;j<=n;++j)
			cin>>job[i].p[j],job[i].p[j]+=n;
		cin>>job[i].tf>>job[i].x_t>>job[i].y_t;
		cin>>job[i].jn>>job[i].x_g>>job[i].y_g>>job[i].z_g;
	}
	for(ll i=n+1;i<=2*n;++i)
	{
		cin>>job[i].HP>>job[i].MP>>job[i].atk>>job[i].def;
		job[i].hp=job[i].HP;
		for(ll j=1;j<=n;++j)
			cin>>job[i].p[j];
		cin>>job[i].tf>>job[i].x_t>>job[i].y_t;
		cin>>job[i].jn>>job[i].x_g>>job[i].y_g>>job[i].z_g;
	}
	for(i1=1;i1<=24000;++i1)
	{
		
		ll max_t=-1,id=0;
		for(ll i=1;i<=2*n;++i)
			if(!die[i])
				find_tar(i);//,cout<<job[i].tar<<' ';cout<<"PPPP"<<endl;
		for(ll i=n;i>0;--i)
		{
			if(die[i])
				continue;
			if(job[i].jn>max_t&&job[i].MP==job[i].mp)
				max_t=job[i].jn,id=i;
		}
		if(max_t!=-1)
		{
			job[id].mp=0;
			t_use(id,max_t,0,i1);
			++job[id].mp;
			if(job[id].tf==5)
				job[id].mp+=job[id].y_t;
			if(job[id].mp>job[id].MP)
				job[id].mp=job[id].MP;
		//cout<<id<<"KKKK\n";
		}	
		else
		{
			max_t=0;
			for(ll i=n;i>0;--i)
			{
				if(!die[i])
				{
					if(job[job[i].tar].hp>max_t)
						max_t=job[job[i].tar].hp,id=i;
					else if(job[job[i].tar].hp==max_t)
					{
						if(mn_att(id)<mn_att(i))
							id=i;
					}
				}
			}
			or_att(id);
			++job[id].mp;
			if(job[id].tf==5)
			job[id].hp+=job[id].x_t;
			if(job[id].hp>job[id].HP)
				job[id].hp=job[id].HP;//cout<<id<<" QQQQ\n";
			job[id].mp=min(job[id].mp,job[id].MP);
		}
		/*if(i1==4)
			cout<<id<<"?>?>>??>>?\n";*/
		ll add=1;
		for(ll i=1;i<=n;++i)
		{
			if(die[i])
			continue;
			for(ll j=1;j<=job[i].cnt;++j)
			{
			if(job[i].jn==4&&job[i].end[j]!=0)
				add+=job[i].y_g;
			if(job[i].jn==0&&job[i].end[j]!=0)
				++add;	
			}
			if(job[i].tf==3)
			{
				job[i].hp=min(job[i].HP,job[i].hp+job[i].x_t);
				job[i].mp=min(job[i].MP,job[i].mp+job[i].y_t);
			}
		}
		for(ll i=1;i<=n;++i)
		{
			if(die[i])
			continue;
			job[i].mp=min(job[i].MP,job[i].mp+add);
		}
			
		max_t=-1,id=0;
		for(ll i=2*n;i>=n+1;--i)
		{
			if(die[i])
				continue;
			if(job[i].jn>max_t&&job[i].MP==job[i].mp)
				max_t=job[i].jn,id=i;
		}
		if(max_t!=-1)
		{
		job[id].mp=0;
		t_use(id,max_t,1,i1);
		++job[id].mp;
		if(job[id].tf==5)
			job[id].mp+=job[id].y_t;
		if(job[id].mp>job[id].MP)
			job[id].mp=job[id].MP;//cout<<id<<"OOOO\n";
		}
		else
		{
			max_t=0;
			for(ll i=2*n;i>=n+1;--i)
			{
				if(!die[i])
				{
					if(job[job[i].tar].hp>max_t)
						max_t=job[job[i].tar].hp,id=i;
					else if(job[job[i].tar].hp==max_t)
					{
						if(mn_att(id)<mn_att(i))
							id=i;
					}
				}
			}
			or_att(id);
			++job[id].mp;
			job[id].mp=min(job[id].mp,job[id].MP);
			if(job[id].tf==5)
			job[id].hp+=job[id].x_t;
			if(job[id].hp>job[id].HP)
			job[id].hp=job[id].HP;//cout<<id<<"PPPP\n";
		}
		add=1;
		for(ll i=n+1;i<=2*n;++i)
		{
			if(die[i])
			continue;
			for(ll j=1;j<=job[i].cnt;++j)
			{
			if(job[i].jn==4&&job[i].end[j]!=0)
				add+=job[i].y_g;
			 if(job[i].jn==0&&job[i].end[j]!=0)
				++add;	
			}
			if(job[i].tf==3)
			{
				job[i].hp=min(job[i].HP,job[i].hp+job[i].x_t);
				job[i].mp=min(job[i].MP,job[i].mp+job[i].y_t);
			}
		}
		//if(i1==3)
		//cout<<job[id].tar<<"++++++{}\n";
		for(ll i=n+1;i<=2*n;++i)
		{
			if(die[i])
			continue;
			job[i].mp=min(job[i].MP,job[i].mp+add);
		}
		//cout<<job[3].mp<<"{}{}{}\n";f
		for(ll i=1;i<=n;++i)
		{
			for(ll j=1;j<=job[i].cnt;++j)
			{
			if(job[i].jn!=4&&job[i].jn!=6&&job[i].jn!=7&&job[i].jn!=8&&job[i].jn!=9&&(job[i].jn==0&&job[i].end[1]==0))
				break;
			if(job[i].jn==4&&job[i].end[j]-1==i1)
				job[i].end[j]=0;
			if(job[i].jn==6&&job[i].end[j]-1==i1)
			{
				end_pabl(i);job[i].end[j]=0;
			}
			if(job[i].jn==7&&job[i].end[j]-1==i1)
			{
				end_thabl(i);job[i].end[j]=0;
			}
			if(job[i].jn==8&&job[i].end[j]-1==i1)
			{
				end_ashst(i);job[i].end[j]=0;
			}
			if(job[i].jn==9&&job[i].end[j]-1==i1)
			{
				end_asyel(i);job[i].end[j]=0;
			}
			if(job[i].jn==0&&job[i].end[j]-1==i1)
			{
				qs(1);
			}	
			}
			
		}
		for(ll i=n+1;i<=2*n;++i)
		{
			ll sum=0;
			for(ll j=1;j<=job[i].cnt;++j)
			{
			if(job[i].jn!=4&&job[i].jn!=6&&job[i].jn!=7&&job[i].jn!=8&&job[i].jn!=9&&(job[i].jn==0&&job[i].end[1]==0))
				break;
			if(job[i].jn==4&&job[i].end[j]-1==i1)
				job[i].end[j]=0;
			if(job[i].jn==6&&job[i].end[j]-1==i1)
			{
				end_pabl(i);job[i].end[j]=0;
			}
			if(job[i].jn==7&&job[i].end[j]-1==i1)
			{
				end_thabl(i);job[i].end[j]=0;
			}
			if(job[i].jn==8&&job[i].end[j]-1==i1)
			{
				end_ashst(i);job[i].end[j]=0;
			}
			if(job[i].jn==9&&job[i].end[j]-1==i1)
			{
				end_asyel(i);job[i].end[j]=0;
			}
			if(job[i].jn==0&&job[i].end[j]-1==i1)
			{
				qs(0);//++sum;
			}	
			}
			//job[i].cnt=job[i].cnt-sum;
		}
		/*for(ll i=1;i<=2*n;++i)
		cout<<job[i].hp<<' ';
		cout<<"?????"<<endl;*/
	}
	cout<<"114514";
}
2022/7/7 16:56
加载中...