wall leg 0分啊

cpp:
#include<bits/stdc++.h>
using namespace std;
struct pig{string name,s;int b,p,nt,lt,mp;bool zp;}a[11];
int n,m,fb,hp,fd;
string __;
map<string,string>mp;
//print()&pt()用来检查。
void pt(string s,int i,int x){//流程。
if(mp[s]=="闪"||mp[s]=="桃"||mp[s]=="南猪入侵"||mp[s]=="万箭齐发"||mp[s]=="无懈可击"||mp[s]=="猪哥连弩"){
cout<<i<<"号"<<a[i].name<<"使用了"<<mp[s]<<endl;
}else cout<<i<<"号"<<a[i].name<<"对"<<x<<"号"<<a[x].name<<"使用了"<<mp[s]<<endl;
return;
}
void print(int i){//输出战局。
cout<<"主猪的智慧:\n";
for(int i=0;i<n;i++)cout<<(a[i].mp?(a[i].mp-1?"未知":"忠猪"):"反猪")<<' ';
cout<<"\n身份:\n";
for(int i=0;i<n;i++)cout<<(a[i].p?(a[i].p-1?"未知":"忠猪"):"反猪")<<' ';
cout<<"\n出牌人:"<<i<<"号"<<a[i].name<<endl<<"目前局势:\n";
for(int i=0;i<n;i++){
cout<<a[i].name<<' '<<a[i].b<<' ';
if(a[i].b<1)cout<<"DEAD\n";
else cout<<a[i].s<<endl;
}cout<<"牌堆:";
for(int i=0;i<__.size();i++)cout<<__[i];
cout<<endl<<endl;
return;
}
void pc(int x,int i){//摸牌。
while(i--){
a[x].s+=__[0];
if(__.size()>1)__.erase(0,1);
}return;
}
void P(int x,int y){//桃。
int i=a[x].s.find("P");
while(i<a[x].s.size()&&a[x].b<4){
a[x].s.erase(i,1),a[x].b++,i=a[x].s.find("P");
if(!y&&a[x].b>0)return;
}return;
}
bool die(int x,int y){//死了?
if(a[y].b>0)return 0;
P(y,0);
if(a[y].b>0)return 0;
a[a[y].lt].nt=a[y].nt,a[a[y].nt].lt=a[y].lt,hp--;
if(a[y].name=="FP")pc(x,3),fd++;
else if(a[x].name=="MP"&&a[y].name=="ZP")a[x].s.erase(0),a[x].zp=0;
return 1;
}
int D(int x){//闪。
int i=a[x].s.find("D");
if(i>=a[x].s.size())return 1;
a[x].s.erase(i,1);
return 0;
}
bool K(int x){//出杀。
int i=a[x].s.find("K");
if(i>=a[x].s.size())return 1;
a[x].s.erase(i,1);
return 0;
}
void K_p(int x,int y,bool &tp){//杀人。
while(!K(x)){
a[y].b-=D(y);
tp=1;
if(die(x,y))return;
if(!a[x].zp)break;
}return;
}
bool J(int x){//无懈可击。
int i=a[x].s.find("J");
if(i>=a[x].s.size())return 0;
a[x].s.erase(i,1);
return 1;
}
bool ok(int x){//献殷勤。
if(a[x].p==-1)return 0;
if(!a[x].p){
for(int i=0,j=0;j<hp;j++,i=a[i].nt){
if(a[i].name=="FP"&&J(i)){
a[i].p=0,a[i].mp=0;
return 1;
}
}return 0;
}for(int i=0,j=0;j<hp;j++,i=a[i].nt){
if((a[i].name=="MP"||a[i].name=="ZP")&&J(i)){
a[i].p=1,a[i].mp=1;
return 1;
}
}return 0;
}
void F(int x,int y){//决斗。
if(a[x].name=="MP"&&a[y].name=="ZP"){
a[y].b--;
return;
}if(ok(y))return;
while(1){
if(K(y)){
a[y].b--,die(x,y);
return;
}if(K(x)){
a[x].b--,die(y,x);
return;
}
}return;
}
void N(int x){//南猪入侵。
for(int i=0,j=0;j<hp;j++,i=a[i].nt){
if(ok(i)||i==x)continue;
if(!K(i))continue;
if(!i&&a[x].p==-1)a[x].mp=0;
a[i].b--,die(x,i);
}return;
}
void W(int x){//万箭齐发。
for(int i=0,j=0;j<hp;j++,i=a[i].nt){
if(ok(i)||i==x)continue;
if(!D(i))continue;
if(!i&&a[x].p==-1)a[x].mp=0;
a[i].b--,die(x,i);
}return;
}
void N_or_W(int x){//有没有上面两个。
int i=a[x].s.find("N");
while(i<a[x].s.size())a[x].s.erase(i,1),N(x),i=a[x].s.find("N");
i=a[x].s.find("W");
while(i<a[x].s.size())a[x].s.erase(i,1),W(x),i=a[x].s.find("W");
return;
}
void pk1(int x,int y){//表敌意:杀。
bool tp=0;
K_p(x,y,tp);
if(tp&&x)a[x].p=a[x].mp=!a[y].p;
return;
}
void pk2(int x,int y){//表敌意:决斗。
bool tp=0;
if(tp&&x)a[x].p=a[x].mp=!a[y].p;
int i=a[x].s.find("F");
while(i<a[x].s.size()&&a[y].b>0)a[x].s.erase(i,1),F(x,y),i=a[x].s.find("F"),tp=1;
return;
}
void pZ(int x){//装备。
int i=a[x].s.find("Z");
while(i<a[x].s.size())a[x].s.erase(i,1),a[x].zp=1,i=a[x].s.find("Z");
return;
}
void ed(){//结局。
cout<<(a[0].b>0?"MP\n":"FP\n");
for(int i=0;i<n;i++){
if(a[i].b<1)cout<<"DEAD\n";
else{
for(int j=0;j<a[i].s.size();j++)cout<<a[i].s[j]<<' ';
cout<<endl;
}
}return;
}
void game(){//游戏。
while(1){
for(int i=0,j=0;j<hp;j++,i=a[i].nt){
pc(i,2),P(i,1),pZ(i);//摸牌,吃桃,装备。
if(!i){//主猪出牌。
N_or_W(i);
if(!a[a[i].nt].mp||!a[a[i].nt].p){
pk1(i,a[i].nt);
die(i,a[i].nt);
}
for(int k=0,l=0;l<hp;l++,k=a[k].nt){
if(i==k||a[k].p&&a[k].mp)continue;
pk2(i,k);
break;
}
}
else if(a[i].name=="ZP"){//忠猪出牌。
N_or_W(i);
if(!a[a[i].nt].p){
pk1(i,a[i].nt);
die(i,a[i].nt);
}
for(int k=0,l=0;l<hp;l++,k=a[k].nt){
if(i==k||a[k].p)continue;
pk2(i,k);
break;
}
}
else{//反猪出牌。
N_or_W(i);
if(a[a[i].nt].p==1){
pk1(i,a[i].nt);
die(i,a[i].nt);
}
pk2(i,0);
}
if(a[0].b<1||fd>=fb){//结束。
ed();
return;
}
}
}return;
}
int main(){//开始。
mp["D"]="闪",mp["F"]="决斗",mp["P"]="桃",mp["K"]="杀",mp["N"]="南猪入侵",mp["W"]="万箭齐发",mp["J"]="无懈可击",mp["Z"]="猪哥连弩";
cin>>n>>m,hp=n;
for(int i=0;i<n;i++){
cin>>a[i].name,a[i].p=a[i].mp=(!i?1:-1);
getline(cin,a[i].s);
while(a[i].s.find(" ")<a[i].s.size())a[i].s.erase(a[i].s.find(" "),1);
a[i].s,a[i].b=4,fb+=(a[i].name=="FP"),a[i].lt=(i+n-1)%n,a[i].nt=(i+1)%n;
}getline(cin,__);
while(__.find(" ")<__.size())__.erase(__.find(" "),1);
game();
return 0;
}