求hack数据
查看原帖
求hack数据
378741
sgz566楼主2022/10/4 16:02

求一个hack数据,3<=n<=43<=n<=4mm越小越好,牌只有P,K,D,Z.非常感谢

#include<iostream>
#include<queue>
using namespace std;
int n,m,use;
char ch;
bool flag=0,isuse=0;
queue<int> pai;
struct pig
{
	string sf;
	int p[9];
	queue<int> pa;
	int hel,lenp,kf,a;
	bool t,lf,z;
}p[11];
bool gameover()
{
	if(p[1].hel<=0)return 1;
	else for(int i=1;i<=n;i++)if(p[i].sf[0]=='F'&&p[i].hel>0)return 0;
	return 1;
}
int nump(char a)
{
	if(a=='P')return 1;
	if(a=='K')return 2;
	if(a=='D')return 3;
	if(a=='F')return 4;
	if(a=='N')return 5;
	if(a=='W')return 6;
	if(a=='J')return 7;
	if(a=='Z')return 8;
}
char chp(int a)
{
	if(a==1)return 'P';
	if(a==2)return 'K';
	if(a==3)return 'D';
	if(a==4)return 'F';
	if(a==5)return 'N';
	if(a==6)return 'W';
	if(a==7)return 'J';
	if(a==8)return 'Z';
}
void chup(int pl,int a)
{
	int t,len=p[pl].pa.size();
	bool flag=0,flag2=0;
	for(int i=1;i<=len;i++)
	{
		t=p[pl].pa.front();
		p[pl].pa.pop();
		if(t==a)flag=1;
		if(!(flag==1&&flag2==0))p[pl].pa.push(t);
		//else cout<<chp(t)<<endl;
		flag2=flag;
	}
}
void end()
{
	if(p[1].hel<=0)cout<<"FP"<<endl;
	else cout<<"MP"<<endl;
	for(int i=1;i<=n;i++)
	{
		//cout<<p[i].lenp<<endl;
		if(p[i].hel<=0)cout<<"DEAD"<<endl;
		else
		{
			for(int j=1;j<=8;j++)
			{
				while(p[i].pa.size()>0)
				{
					//cout<<p[i].p[j]<<endl;
					cout<<chp(p[i].pa.front())<<" ";
					p[i].pa.pop();
				}
			}
			cout<<endl;
		}
	}
}
void mopai(int pl)
{
		if(p[pl].hel>0)
		{
			p[pl].p[pai.front()]++;
			p[pl].pa.push(pai.front());
			if(pai.size()==1)pai.push(pai.front());
			pai.pop();
			p[pl].p[pai.front()]++;
			p[pl].pa.push(pai.front());
			if(pai.size()==1)pai.push(pai.front());
			pai.pop();
			p[pl].lenp+=2;
		}
}
bool att(int pla,int plb)
{
	if(!p[plb].t&&!(p[plb].lf&&p[pla].sf[0]=='M')||pla==plb)return 0;
	if(p[pla].sf[0]=='M')
	{
		if(p[plb].lf||p[plb].sf[0]=='F')return 1;
		else return 0;
	}
	else if(p[pla].sf[0]=='Z')
	{
		if(p[plb].sf[0]=='F')return 1;
		else return 0;
	}
	else
	{
		if(p[plb].sf[0]=='Z'||p[plb].sf[0]=='M')return 1;
		else return 0;
	}
}
bool pro(int pla,int plb)
{
	if(att(pla,plb))return 0;
	else if(!p[plb].t)return 0;
	else return 1;
}
void deadp(int pl)
{
	if(p[pl].sf[0]=='M'||gameover())
	{
		flag=1;
		return;
	}
	if(p[p[pl].kf].sf[0]=='M'&&p[pl].sf[0]=='Z')
	{
		for(int i=1;i<=8;i++)
		{
			p[p[pl].kf].p[i]=0;
			p[p[pl].kf].z=0;
		}
	}
	else if(p[pl].sf[0]=='F')
	{
		p[p[pl].kf].p[pai.front()]++;
		p[p[pl].kf].pa.push(pai.front());
		if(pai.size()==1)pai.push(pai.front());
		pai.pop();
		p[p[pl].kf].p[pai.front()]++;
		p[p[pl].kf].pa.push(pai.front());
		if(pai.size()==1)pai.push(pai.front());
		pai.pop();
		p[p[pl].kf].p[pai.front()]++;
		p[p[pl].kf].pa.push(pai.front());
		if(pai.size()==1)pai.push(pai.front());
		pai.pop();
		p[p[pl].kf].lenp+=3;
	}
	for(int i=1;i<=n;i++)
	{
		if(p[i].hel>0)
		{
			for(int j=1;j<n;j++)
			{
				if(p[(i+j-1)%n+1].hel>0)
				{
					p[i].a=(i+j-1)%n+1;
					break;
				}
			}
			//cout<<i<<"dis"<<p[i].a<<"is 1"<<endl;
		}
	}
}
/* 
bool J(int pl,bool flag,bool flag2)
{
	//cout<<"abcdefg "<<pl<<endl;
	if(!p[pl].p[7])return 0;
	p[pl].t=1;
	p[pl].p[7]--;
	chup(pl,7);
	for(int i=1;i<=n;i++)if(p[i].hel>0&&(!flag?att(i,pl):pro(i,pl)))flag^=J(i,flag,flag2^1);
	return flag;
}
*/
void P(int pl)
{
	if(p[pl].hel<4&&p[pl].p[1])
	{
		p[pl].p[1]--;
		chup(pl,1);
		p[pl].hel++;
		use++;
		isuse=1;
		//cout<<pl<<" use P,health +1"<<endl;
	}
}
void Z(int pl)
{
	if(!p[pl].p[8])return;
	p[pl].p[8]--;
	chup(pl,8);
	use++;
	isuse=1;
	//cout<<pl<<" use Z"<<endl;
	p[pl].z=1;
}
void N(int pl)
{
	//cout<<"114514"<<endl;
	//cout<<"main:"<<pl<<endl;
	if(!p[pl].p[5])return;
	p[pl].p[5]--;
	chup(pl,5);
	use++;
	isuse=1;
	//cout<<pl<<" use N"<<endl;
	for(int i=1;i<n;i++)
	{
		if(p[(i+pl-1)%n+1].p[2])
		{
			p[(i+pl-1)%n+1].p[2]--;
			chup((i+pl-1)%n+1,2);
			//cout<<(i+pl-1)%n+1<<" use K"<<endl;
		}
		else
		{
			p[(i+pl-1)%n+1].hel--;
			p[(i+pl-1)%n+1].kf=pl;
			//cout<<(i+pl-1)%n+1<<"'s health -1"<<endl;
			if(p[(i+pl-1)%n+1].sf[0]=='M')p[pl].lf=1;
			if(p[(i+pl-1)%n+1].hel<=0)
			{
				P((i+pl-1)%n+1);
				if(p[(i+pl-1)%n+1].hel<=0)
				{
					//cout<<(i+pl-1)%n+1<<" dead"<<endl;
					deadp((i+pl-1)%n+1);
					if(gameover()||flag)return;
				}
			}
		}
	}
}
void W(int pl)
{
	if(!p[pl].p[6])return;
	p[pl].p[6]--;
	chup(pl,6);
	use++;
	isuse=1;
	//cout<<pl<<" use W"<<endl;
	for(int i=1;i<n;i++)
	{
		if(p[(i+pl-1)%n+1].p[3])
		{
			p[(i+pl-1)%n+1].p[3]--;
			chup((i+pl-1)%n+1,3);
			//cout<<(i+pl-1)%n+1<<" use D"<<endl;
		}
		else
		{
			p[(i+pl-1)%n+1].hel--;
			p[(i+pl-1)%n+1].kf=pl;
			//cout<<(i+pl-1)%n+1<<"'s health -1"<<endl;
			if(p[(i+pl-1)%n+1].sf[0]=='M')p[pl].lf=1;
			if(p[(i+pl-1)%n+1].hel<=0)
			{
				P((i+pl-1)%n+1);
				if(p[(i+pl-1)%n+1].hel<=0)
				{
					//cout<<(i+pl-1)%n+1<<" dead"<<endl;
					deadp((i+pl-1)%n+1);
					if(gameover()||flag)return;
				}
			}
		}
	}
}
void F(int pla,int plb)
{
	if(!p[pla].p[4])return;
	p[pla].p[4]--;
	chup(pla,4);
	//cout<<pla<<" use F to "<<plb<<endl;
	isuse=1;
	p[pla].t=1;
	if(p[pla].sf[0]=='M'&&p[plb].sf[0]=='Z')
	{
		p[plb].hel--;
		p[plb].kf=pla;
		//cout<<plb<<"'s health -1"<<endl;
		if(p[plb].hel<=0)
		{
			P(plb);
			if(p[plb].hel<=0)
			{
				//cout<<plb<<" dead"<<endl;
				deadp(plb);
				if(gameover()||flag)return;
			}
		}
		return;
	}
	int a114514=min(p[plb].p[2],p[pla].p[2]);
	p[pla].p[2]-=a114514;
	p[plb].p[2]-=a114514;
	for(int i=1;i<=a114514;i++)
	{
		chup(plb,2);
		//cout<<plb<<" use K"<<endl;
		chup(pla,2);
		//cout<<pla<<" use K"<<endl;
	}
	use+=a114514;
	if(use>0)isuse=1;
	if(p[pla].p[2]>=p[plb].p[2])
	{
		p[plb].hel--;
		p[plb].kf=pla;
		//cout<<plb<<"'s health -1"<<endl;
		if(p[plb].hel<=0)
		{
			P(plb);
			if(p[plb].hel<=0)
			{
				//cout<<plb<<" dead"<<endl;
				deadp(plb);
				if(gameover()||flag)return;
			}
		}
	}
	else
	{
		chup(plb,2);
		//cout<<plb<<" use K"<<endl;
		p[plb].p[2]--;
		p[pla].hel--;
		p[pla].kf=plb;
		//cout<<pla<<"'s health -1"<<endl;
		if(p[pla].hel<=0)
		{
			P(pla);
			if(p[pla].hel<=0)
			{
				//cout<<pla<<" dead"<<endl;
				deadp(pla);
				if(gameover()||flag)return;
			}
		}
	}
}
void D(int pla,int plb)
{
	if(p[pla].p[2]<=0)return;
	p[pla].t=1;
	if(p[pla].z)
	{
		while(p[pla].p[2]>0&&p[plb].hel>0)
		{
			p[pla].p[2]--;
			chup(pla,2);
			use++;
			isuse=1;
			//cout<<pla<<" use K to "<<plb<<endl;
			if(p[plb].p[3])
			{
				p[plb].p[3]--;
				chup(plb,3);
				//cout<<plb<<" use D"<<endl;
			}
			else
			{
				p[plb].hel--;
				p[plb].kf=pla;
				//cout<<plb<<"'s health -1"<<endl;
			}
			if(p[plb].hel<=0)
			{
				P(plb);
				if(p[plb].hel<=0)
				{
					//cout<<plb<<" dead"<<endl;
					deadp(plb);
				}
			}
		}
	}
	else
	{
		p[pla].p[2]--;
		chup(pla,2);
		use++;
		isuse=1;
		//cout<<pla<<" use K to "<<plb<<endl;
		if(p[plb].p[3])
		{
			p[plb].p[3]--;
			chup(plb,3);
			//cout<<plb<<" use D"<<endl;
		}
		else
		{
			p[plb].hel--;
			p[plb].kf=pla;
			//cout<<plb<<"'s health -1"<<endl;
		}
		if(p[plb].hel<=0)
		{
			P(plb);
			if(p[plb].hel<=0)
			{
				//cout<<plb<<" dead"<<endl;
				deadp(plb);
			}
		}
	}
}
void wht()
{
	for(int i=1;i<=n;i++)
	{
		cout<<p[i].hel<<" "<<p[i].sf<<" ";
		for(int j=1;j<=p[i].pa.size();j++)
		{
			cout<<chp(p[i].pa.front())<<" ";
			p[i].pa.push(p[i].pa.front());
			p[i].pa.pop(); 
		}
		cout<<endl;
	}
}
int main()
{
	freopen("P2482_1.in","r",stdin) ;
	freopen("1919810.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>p[i].sf;
		for(int j=1;j<=4;j++)
		{
			 cin>>ch;
			 p[i].p[nump(ch)]++;
			 p[i].pa.push(nump(ch));
		}
		p[i].a=i%n+1;
		p[i].hel=p[i].lenp=4;
	}
	for(int i=1;i<=m;i++)
	{
		cin>>ch;
		pai.push(nump(ch));
	}
	p[1].t=1;
	p[n].t=0;
	while(!gameover()&&!flag)
	{
		
		for(int i=1;i<=n;i++)
		{
			
			//cout<<"1111111"<<endl;
			
			if(gameover()||flag)break;
			if(p[i].hel>0)
			{
				mopai(i);
				bool isK=1;
				int lent=p[i].pa.size();
				//cout<<lent<<endl;
				for(int a=1;a<=lent;a++)
				{
					//wht();
					//cout<<endl;
					int t=p[i].pa.front();
					//cout<<t<<endl;
					if(t==1)
					{
						P(i);
						if(!isuse)
						{
							p[i].pa.pop();
							p[i].pa.push(t);
						}
						isuse=0;
					}
					else if(t==2)
					{
						if(att(i,p[i].a)&&isK)
						{
							D(i,p[i].a);
							isK=0;
							if(gameover()||flag)break;
						}
						if(!isuse)
						{
							p[i].pa.pop();
							p[i].pa.push(t);
						}
						isuse=0;
					}
					else if(t==3)
					{
						p[i].pa.pop();
						p[i].pa.push(t);
						continue;
					}
					else if(t==5)
					{
						N(i);
						if(gameover()||flag)break;
						if(!isuse)
						{
							p[i].pa.pop();
							p[i].pa.push(t);
						}
						isuse=0;
					}
					else if(t==6)
					{
						W(i);
						if(gameover()||flag)break;
						if(!isuse)
						{
							p[i].pa.pop();
							p[i].pa.push(t);
						}
						isuse=0;
					}
					else if(t==4)
					{
						if(p[i].sf[0]=='F')
						{
							F(i,1);
							if(gameover()||flag)break;
						}
						else
						{
							for(int j=1;j<n;j++)
							{
								//cout<<i<<" "<<(i+j-1)%n+1<<" "<<att(i,(i+j-1)%n+1)<<endl;
								if(p[(i+j-1)%n+1].hel>0&&att(i,(i+j-1)%n+1))
								{
									//cout<<i<<" "<<(i+j-1)%n+1<<" "<<att(i,(i+j-1)%n+1)<<endl;
									F(i,(i+j-1)%n+1);
									break;
								}
							}
						}
						if(!isuse)
						{
							//puts("isuse");
							p[i].pa.pop();
							p[i].pa.push(t);
						}
						isuse=0;
					}
					else if(t==8)
					{
						Z(i);
						if(!isuse)
						{
							p[i].pa.pop();
							p[i].pa.push(t);
						}
						isuse=0;
					}
					//cout<<use<<" "<<lent<<" "<<isuse<<endl;
				}
				lent-=max(use-1,0);
				use=0;
			}
		}
		
		cout<<"round end"<<endl;
		/*
		for(int i=1;i<=n;i++)
		{
			cout<<p[i].t<<" "<<p[i].lf<<endl;
		}
		for(int i=1;i<=n;i++)
		{
			cout<<p[i].hel<<endl;
			for(int j=1;j<=8;j++)
			{
				cout<<p[i].p[j]<<" ";
			}
			cout<<endl;
		}
		
		
		
		cout<<"get card"<<endl;
		for(int i=1;i<=n;i++)
		{
			cout<<p[i].hel<<endl;
			for(int j=1;j<=8;j++)
			{
				cout<<p[i].p[j]<<" ";
			}
			cout<<endl;
		}
		*/
	}
	end();
}
2022/10/4 16:02
加载中...