两个人打牌,只要A可以打出一手牌B接不上,Yes 否则No。
如果A可以直接打完,也输出Yes。
简单的把情况都枚举一遍就可以了。
#include<stdio.h>
#include<string.h>
int main()
{
int p1[20],p2[20],q1[10],q2[10],num1[5],num2[5];
int T,i,j,l;
char c[30];
scanf("%d",&T);
while(T--)
{
memset(p1,0,sizeof(p1));
memset(p2,0,sizeof(p2));
memset(q1,0,sizeof(q1));
memset(q2,0,sizeof(q2));
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
scanf("%s",c);
l=strlen(c);
for(i=0;i<l;i++)
{
if(c[i]>='3'&&c[i]<='9') p1[c[i]-'2']++;
if(c[i]=='T') p1[8]++;
if(c[i]=='J') p1[9]++;
if(c[i]=='Q') p1[10]++;
if(c[i]=='K') p1[11]++;
if(c[i]=='A') p1[12]++;
if(c[i]=='2') p1[13]++;
if(c[i]=='X') p1[14]++;
if(c[i]=='Y') p1[15]++;
}
scanf("%s",c);
l=strlen(c);
for(i=0;i<l;i++)
{
if(c[i]>='3'&&c[i]<='9') p2[c[i]-'2']++;
if(c[i]=='T') p2[8]++;
if(c[i]=='J') p2[9]++;
if(c[i]=='Q') p2[10]++;
if(c[i]=='K') p2[11]++;
if(c[i]=='A') p2[12]++;
if(c[i]=='2') p2[13]++;
if(c[i]=='X') p2[14]++;
if(c[i]=='Y') p2[15]++;
}
for(i=1;i<=15;i++)
{
q1[p1[i]]=i;
num1[p1[i]]++;
q2[p2[i]]=i;
num2[p2[i]]++;
}
int zz=0;
if(p1[15]+p1[14]>=2) zz=1;
if(q2[3]>q2[2]) q2[2]=q2[3];
if(q2[2]>q2[1]) q2[1]=q2[2];
if(q1[3]>q1[2]) q1[2]=q1[3];
if(q1[2]>q1[1]) q1[1]=q1[2];
if(q2[4]!=0)//如果有炸弹
{
if(q1[4]>q2[4]) zz=1;
}
else
{
if(q1[1]>=q2[1]&&q1[1]>0) zz=1;
if(q1[2]>=q2[2]&&q1[2]>0) zz=1;
if(q1[3]>=q2[3]&&q1[3]>0) zz=1;
if(q1[4]>0) zz=1;
if(num1[3]>=1&&num1[3]+num1[2]>=2&&num2[3]==1&&num2[2]==0) zz=1;
if(num1[3]>=1&&num1[1]+num1[2]+num1[3]>=2&&num2[3]==1&&num2[1]==0&&num2[2]==0) zz=1;
}
if(p2[14]+p2[15]>=2) zz=0;
if(num1[1]+num1[2]+num1[3]+num1[4]<=1) zz=1; //如果数量小于等于1可以一把
if(num1[1]==0&&num1[2]==1&&num1[3]==1&&num1[4]==0) zz=1; //三带二
if(num1[1]==1&&num1[2]==0&&num1[3]==1&&num1[4]==0) zz=1; //三带一
if(num1[1]==0&&num1[2]==1&&num1[3]==0&&num1[4]==1) zz=1; //四带二
if(num1[1]==2&&num1[2]==0&&num1[3]==0&&num1[4]==1) zz=1; //四带二个一
if(zz==1) printf("Yes\n");
else printf("No\n");
}
return 0;
}