95分求助!!!
查看原帖
95分求助!!!
437788
eEfiuys楼主2021/5/25 20:12

#10 WA 了

#include<bits/stdc++.h>
using namespace std;
int n,m,fzs,sp1,num1,num2;
char sf1[11],pd[2001],s[11];
struct node
{
	int smz,sps,next,last;
	char sf,sp[2001];
	bool zgln;
}pig[11];
bool ch,js;
void mp(int i)
{
	if(!m)
		m++;
	//cout<<i<<"摸到"<<pd[m]<<endl;
	pig[i].sp[++pig[i].sps]=pd[m--];
}
void sw(int p1,int p2)
{
	//cout<<p1<<"即将杀死"<<p2<<endl;
	for(int i=1;i<=pig[p2].sps;i++)
		if(pig[p2].sp[i]=='P')
		{			
			pig[p2].sp[i]='O';
			pig[p2].smz++;
			//cout<<p2<<"桃,生命"<<pig[p2].smz<<endl;
			return;
		}
	//cout<<p1<<"杀死"<<p2<<endl;
	pig[pig[p2].next].last=pig[p2].last;
    pig[pig[p2].last].next=pig[p2].next;
    if(p2==1)
    {
    	js=1;
    	return;
	}
	if(pig[p2].sf=='F')
	{
		fzs--;
		if(!fzs)
		{
			js=1;
			return;
		}
		for(int i=1;i<=3;i++)
			mp(p1);
	}	
	if(pig[p1].sf=='M'&&pig[p2].sf=='Z')
		pig[p1].sps=0,pig[p1].zgln=0;
}
void sha(int p1,int p2)
{
	for(int i=1;i<=pig[p2].sps;i++)
		if(pig[p2].sp[i]=='D')
		{
			//cout<<p2<<"闪\n";
			pig[p2].sp[i]='O';
			return;
		}	
	pig[p2].smz--;
	//cout<<p2<<"剩余生命"<<pig[p2].smz<<endl;
	if(!pig[p2].smz)
		sw(p1,p2);
}
bool wxkj(int p1,int p2,int p3)
{
    int i=p1;
    while(1)
	{
        if(p3==1)
		{
            if(sf1[p2]==pig[i].sf||(sf1[p2]=='M'&&pig[i].sf=='Z')||(sf1[p2]=='Z'&&pig[i].sf=='M'))
                for(int j=1;j<=pig[i].sps;j++)
                    if(pig[i].sp[j]=='J')
					{
                        pig[i].sp[j]='O';
                        sf1[i]=pig[i].sf;
                        return !wxkj(i,p1,0);
                    }
        }
        else
		{
            if(((pig[i].sf=='M'||pig[i].sf=='Z')&&sf1[p1]=='F')||(pig[i].sf=='F'&&(sf1[p1]=='M'||sf1[p1]=='Z')))
                for(int j=1;j<=pig[i].sps;j++)
                    if(pig[i].sp[j]=='J')
					{
                        pig[i].sp[j]='O';
                        sf1[i]=pig[i].sf;
                        return !wxkj(i,p1,0);
                    }
        }
        i=pig[i].next;
        if(i==p1) 
			break;
    }
    return false;
}
void nzrq(int p1)
{
    for(int p2=pig[p1].next;p2!=p1;p2=pig[p2].next)
        if(!wxkj(p1,p2,1))
		{
			int i;
            for(i=1;i<=pig[p2].sps;i++)
                if(pig[p2].sp[i]=='K')
				{
					//cout<<p2<<"杀\n";
                    pig[p2].sp[i]='O';
                    break;
                }
            if(i>pig[p2].sps)
			{				
                pig[p2].smz--;
                //cout<<p2<<"剩余生命"<<pig[p2].smz<<endl;
                if(p2==1&&sf1[p1]=='P') 
					sf1[p1]='L';
                if(!pig[p2].smz)
					sw(p1,p2);
                if(js) 
					return ;
            }
        }
}
void wjqf(int p1)
{
    for(int p2=pig[p1].next;p2!=p1;p2=pig[p2].next)
        if(!wxkj(p1,p2,1))
		{
			int i;
            for(i=1;i<=pig[p2].sps;i++)
                if(pig[p2].sp[i]=='D')
				{
					//cout<<p2<<"闪\n";
                    pig[p2].sp[i]='O';
                    break;
                }
            if(i>pig[p2].sps)
			{				
                pig[p2].smz--;
                //cout<<p2<<"剩余生命"<<pig[p2].smz<<endl;
                if(p2==1&&sf1[p1]=='P')
					sf1[p1]='L';
                if(!pig[p2].smz)
					sw(p1,p2);
                if(js)
					return;
            }
        }
}
void jd(int p1,int p2)
{
    if(wxkj(p1,p2,1))
		return;
    if(p1==1&&pig[p2].sf=='Z')
	{		
        pig[p2].smz--;
        //cout<<p2<<"剩余生命"<<pig[p2].smz<<endl;
        if(!pig[p2].smz)
			sw(p1,p2);
        return ;
    }
    int num1=0,num2=0;
    for(int i=1;i<=pig[p1].sps;i++)
    	if(pig[p1].sp[i]=='K')
    		num1++;
    for(int i=1;i<=pig[p2].sps;i++)
    	if(pig[p2].sp[i]=='K')
    		num2++;
    if(num2<=num1)
    {
    	pig[p2].smz--;
    	//cout<<p2<<"剩余生命"<<pig[p2].smz<<endl;
    	int x=0;	
    	for(int i=1;i<=pig[p1].sps;i++)
    	{
			if(x==num2)
				break;
    		if(pig[p1].sp[i]=='K')
    		{
    			pig[p1].sp[i]='O';
    			x++;
			}	
		}
		for(int i=1;i<=pig[p2].sps;i++)
			if(pig[p2].sp[i]=='K')
				pig[p2].sp[i]='O';
		if(!pig[p2].smz)
			sw(p1,p2);
		return;
	}
	else
	{
		pig[p1].smz--;
		//cout<<p1<<"剩余生命"<<pig[p1].smz<<endl;
    	int x=0;	
    	for(int i=1;i<=pig[p2].sps;i++)
    	{
			if(x==num1+1)
				break;
    		if(pig[p2].sp[i]=='K')
    		{
    			pig[p2].sp[i]='O';
    			x++;
			}	
		}
		for(int i=1;i<=pig[p1].sps;i++)
			if(pig[p1].sp[i]=='K')
				pig[p1].sp[i]='O';
		if(!pig[p1].smz)
			sw(p2,p1);
		return;
	}
}
void zgs()
{
    js=0;
	if(!fzs)
	{
		js=1;
		return;
	}	
	for(int i=1;i;i=pig[i].next)
	{
		for(int j=1;j<=2;j++)
			mp(i);
		ch=1;
		for(int j=1;j<=pig[i].sps;j++)
			if(pig[i].sp[j]!='O')
			{
				if(!pig[i].smz)
					break;
				sp1=pig[i].sp[j];
				if(sp1=='P')
					if(pig[i].smz<4)
					{						
						pig[i].smz++;
						//cout<<i<<"桃,生命"<<pig[i].smz<<endl;
						pig[i].sp[j]='O';
						continue;
					}
				if(sp1=='K')
				{
					if(!ch&&!pig[i].zgln)
						continue;
					if(pig[i].sf=='M'&&sf1[pig[i].next]!='L'&&sf1[pig[i].next]!='F')
						continue;
                    if(pig[i].sf=='Z'&&sf1[pig[i].next]!='F')
						continue;
                    if(pig[i].sf=='F'&&sf1[pig[i].next]!='Z'&&sf1[pig[i].next]!='M')
						continue;
                    pig[i].sp[j]='O';
                    //cout<<i<<"对"<<pig[i].next<<"杀\n";
                    sha(i,pig[i].next);                   
                    sf1[i]=pig[i].sf;
					ch=0;
                    if(js)
						return;
					continue;
				}
				if(sp1=='F')
				{
					if(pig[i].sf=='F')
					{
						//cout<<i<<"对1决斗\n";
                        pig[i].sp[j]='O';
						jd(i,1);
                        sf1[i]=pig[i].sf;
                        if(js)
							return;
                        j=0;
                        continue;
                    }
                    for(int k=pig[i].next;k!=i;k=pig[k].next)
                        if((pig[i].sf=='M'&&(sf1[k]=='L'||sf1[k]=='F'))||(pig[i].sf=='Z'&&sf1[k]=='F'))
						{
							//cout<<i<<"对"<<k<<"决斗\n";
                            pig[i].sp[j]='O';                           
							jd(i,k);							
	                        sf1[i]=pig[i].sf;
                            if(js) 
								return;
                            j=0;
                            break;
                        }
                    continue;
				}
				if(sp1=='N')
				{
					//cout<<i<<"南猪入侵\n";
					pig[i].sp[j]='O';
					nzrq(i);
					if(js)
						return;
					continue;
				}
				if(sp1=='W')
				{
					//cout<<i<<"万箭齐发\n";
					pig[i].sp[j]='O';
					wjqf(i);
					if(js)
						return;
					continue;
				}
				if(sp1=='Z')
				{
					//cout<<i<<"猪哥连弩\n";
					pig[i].sp[j]='O';
					pig[i].zgln=1;
					j=0;
					continue;
				}
			}
	}
}
int main()
{
	//freopen("P2482_10.in","r",stdin);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		pig[i].next=i+1,pig[i].last=i-1;
	pig[n].next=1;
	pig[1].last=n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=2000;j++)
			pig[i].sp[j]='O';
		cin>>s;
		pig[i].sf=s[0];
		for(int j=1;j<=4;j++)
		{
			cin>>s;
			pig[i].sp[j]=s[0];
		}
		pig[i].smz=4;
		pig[i].sps=4;
		if(pig[i].sf=='F')
			fzs++;
		pig[i].zgln=0;
	}
	for(int i=1;i<=m;i++)
	{
		cin>>s;
		pd[m-i+1]=s[0];
	}
	sf1[1]='M';
	for(int i=2;i<=n;i++)
		sf1[i]='P';
	zgs();
	if(pig[1].smz<=0)
		cout<<"FP\n";
    else
		cout<<"MP\n";
    for(int i=1;i<=n;i++)
	{
        if(pig[i].smz<=0)
			cout<<"DEAD\n";
        else
		{
            for(int j=1;j<=pig[i].sps;j++)
                if(pig[i].sp[j]!='O')
                	cout<<pig[i].sp[j]<<" ";
            cout<<endl;
        }
    }
	return 0;
}
2021/5/25 20:12
加载中...