HDU 4930 Fighting the Landlords 多校第六场

两个人打牌,只要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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值