求一个hack数据,3<=n<=4 , m越小越好,牌只有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();
}