求调
查看原帖
求调
686471
Lan_yan楼主2023/12/20 12:48

我因为钛蒻了,所以先尝试着写跟锦囊牌无关的代码。

结果万紫千红

自己创造了几个样例,结果都还可以

就是不知道哪里错了

#include<bits/stdc++.h>
using namespace std;
struct wanjia
{
	char card[2005];
	int chusx=4,xianx=4,pais=4,shenf;
	int yinx[15]={0},nfs=1;
	int zhunu=0;
}pig[15];
int n,m,biaosf[15]={0},jshu=0;
char paid[1000005]={0};
bool slm[15]={0};
void zhengl(int y,int x)
{
	for(int i=x;i<pig[y].pais;i++)pig[y].card[i]=pig[y].card[i+1];
	pig[y].card[pig[y].pais]=0;pig[y].pais--;
	
}
void tao(int x,int y)
{
	if(pig[x].xianx<=0||pig[x].chusx!=pig[x].xianx)
	{
		pig[x].xianx++;zhengl(x,y);
	}
}
void jies()//可以
{
	int i,j;
	if(slm[0]==1)printf("FP\n");
	else printf("MP\n");
	for(i=0;i<n;i++)
	{
		if(slm[i]==1)printf("DEAD\n");
		else
		{
			printf("%d\n",pig[i].xianx);
			for(j=1;j<=pig[i].pais;j++)printf("%c ",pig[i].card[j]);
			printf("\n");
		}
	}
	jshu=1;
}
void die(int x,int y)
{
	int i,j,k=1;
	slm[y]=1;
	if(x==0&&pig[y].shenf==2)
	{
		pig[x].pais=0;
		memset(pig[x].card,0,sizeof(pig[x].card));
		pig[x].zhunu=0;
	}
	for(i=0;i<n;i++)
	{
		if(pig[i].shenf==-1)
		{
			if(slm[i]==0)k=0;
		}
	}
	if(k==1||slm[0]==1)jies();
	if(pig[y].shenf==-1)
	{
		if(paid[++m]==0)pig[x].card[++pig[x].pais]=paid[m];
		else pig[x].card[++pig[x].pais]=paid[m];
		if(paid[++m]==0)pig[x].card[++pig[x].pais]=paid[m];
		else pig[x].card[++pig[x].pais]=paid[m];
		if(paid[++m]==0)pig[x].card[++pig[x].pais]=paid[m];
		else pig[x].card[++pig[x].pais]=paid[m];
	}
}
void shan(int x,int y)
{
	int kou=1,i;
	for(i=1;i<=pig[y].pais;i++)
	{
		if(pig[y].card[i]=='D')
		{
			zhengl(y,i);kou=0;break;
		}
	}
	if(kou==1)
	{
		pig[y].xianx--;
		if(pig[y].xianx<=0)
		{
			for(i=1;i<=pig[y].pais;i++)
			{
				if(pig[y].card[i]=='P')
				{
					tao(y,i);break;
				}
			}
			if(pig[y].xianx<=0)die(x,y);
		}
	}
}
void sha(int x,int y)
{
	int si=x+1;
	while(slm[si]==1&&si<=n)si++;
	if(si==n)si=0;
	if(pig[x].shenf==-1&&si==0)
	{
		pig[x].nfs=0;
		zhengl(x,y);shan(x,si);return;
	}
	if(pig[x].shenf==-1&&biaosf[si]==1)
	{
		pig[x].nfs=0;
		zhengl(x,y);shan(x,si);return;
	}
	if(pig[x].shenf==2&&biaosf[si]==-1)
	{
		pig[x].nfs=0;
		zhengl(x,y);shan(x,si);return;
	}
	if(pig[x].shenf==1&&biaosf[si]==-1)
	{
		pig[x].nfs=0;
		zhengl(x,y);shan(x,si);return;
	}
	if(pig[x].shenf==1&&pig[x].yinx[si]==-1)
	{
		pig[x].nfs=0;
		zhengl(x,y);shan(x,si);return;
	}
}
void zhuge(int x,int y)
{
	pig[x].zhunu=1;
	int shas=0,i,fsha=0;
	zhengl(x,y);
	for(i=1;i<=pig[x].pais;i++)
	{
		if(pig[x].card[i]=='K')shas++;
	}
	for(i=1;i<=pig[x].pais;i++)
	{
		if(pig[x].card[i]!='K')pig[x].card[++fsha]=pig[x].card[i];
	}
	for(i=shas+1;i<=pig[x].pais;i++)
	{
		pig[x].card[++fsha]='K';
	}
	for(i=1;i<=pig[x].pais;i++)printf("%c ",pig[x].card[i]);
	printf("\n");
}
void go(int x)
{
	int i,j;
	for(i=1;i<=pig[x].pais;i++)
	{
		if(pig[x].card[i]=='P')tao(x,i);
		if(pig[x].card[i]=='K'&&pig[x].zhunu==0)
		{
			if(pig[x].nfs==1)sha(x,i);
		}
		if(pig[x].card[i]=='K'&&pig[x].zhunu==1)sha(x,i);
		if(pig[x].card[i]=='Z')zhuge(x,i);
		if(jshu==1)return;
	}
}
int main()
{
	int i,j;
	scanf("%d%d",&n,&m);
	for(i=0;i<n;i++)
	{
		string s;
		cin>>s;
		if(i==0)pig[i].shenf=1;
		if(s=="ZP")pig[i].shenf=2;
		if(s=="FP")pig[i].shenf=-1;
		cin>>pig[i].card[1]>>pig[i].card[2];
		cin>>pig[i].card[3]>>pig[i].card[4];
	}
	biaosf[0]=2;
	for(i=1;i<=m;i++)cin>>paid[i];
	for(i=m+1;i<=300000;i++)paid[i]=paid[m];
	m=0;
	while(1)
	{
		for(i=0;i<n;i++)
		{
			if(slm[i]==1)continue;
			pig[i].card[++pig[i].pais]=paid[++m];
			pig[i].card[++pig[i].pais]=paid[++m];
			go(i);
			pig[i].nfs=1;
		}
		if(jshu==1)break;
	}
	return 0;
}```

码风可能有点丑,不喜勿喷
2023/12/20 12:48
加载中...