zoukankan      html  css  js  c++  java
  • hdu4930 模拟斗地主

    题意:
           模拟斗地主,出牌有一下规则,1张,1对,3张,3带1,3带2,炸弹(包括两个猫),4带2,这写规则,没有其他的,然后给你两幅牌,只要第一个人出了一次牌对方管不上,那么或者第一个人一次把牌都出光了,就算胜利,否则第一个人失败,记住,只出一次牌。

    思路:

           把所有的状态都模拟,每次都找出当前状态的最大值,如果对方管不上,那么就赢了,其他的就是注意点细节,比如大猫和小猫,还有就是炸弹什么的,今天做了一下午这个题目,敲了很多便都wa了,后来查出来竟然是自己不了解规则,我之前一直以为4带2必须用4带2去管,不能炸,结果今天问了他们才知道,4带2已经不是炸弹了,可以直接随便拿一个炸弹炸了,哎!斗地主都不会玩,颜面何存啊!


    #include<stdio.h>
    #include<string.h>
    
    int k1[500] ,k2[500];
    int pai[20];
    char str1[25] ,str2[25];
    
    void ini()
    {
       pai[1] = 'Y' ,pai[2] = 'X' ,pai[3] = '2' ,pai[4] = 'A' ,pai[5] = 'K';
       pai[6] = 'Q' ,pai[7] = 'J' ,pai[8] = 'T' ,pai[9] = '9' ,pai[10] = '8';
       pai[11] = '7' ,pai[12] = '6' ,pai[13] = '5' ,pai[14] = '4' ,pai[15] = '3';
    }
    
    int main ()
    {
       ini();
       int t ,l1 ,l2 ,ok ,A ,XY ,i ,j ,Z;
       scanf("%d" ,&t);
       while(t--)
       {
          scanf("%s" ,str1) ,scanf("%s" ,str2);
          l1 = strlen(str1) ,l2 = strlen(str2);
          memset(k1 ,0 ,sizeof(k1));
          memset(k2 ,0 ,sizeof(k2));
          for(i = 0 ;i < l1 ;i ++)
          k1[str1[i]] ++;
          for(i = 0 ;i < l2 ;i ++)
          k2[str2[i]] ++;
          if(k1['X'] && k1['Y'])
          {
             puts("Yes");
             continue;
          }
          k2['X'] && k2['Y'] ? XY = Z = 1 : XY = 0;
          ok = Z = A = 0;
          for(i = 1 ;i <= 15 ;i ++)
          if(k2[pai[i]] >= 4) Z = 1;
          // 1
          for(i = 1 ;i <= 15 ;i ++)
          {
             if(k1[pai[i]] >= 1)
             {
                if(l1 == 1) A = 1;
                int tmp = 0;
                for(j = 1 ;j < i ;j ++)
                if(k2[pai[j]] >= 1) tmp = 1;
                if(!tmp && !Z) ok = 1;
                break;
             }
          }
          // 2
          for(i = 1 ;i <= 15 ;i ++)
          {
             if(k1[pai[i]] >= 2)
             {
                if(l1 == 2) A = 1;
                int tmp = 0;
                for(j = 1 ;j < i ;j ++)
                if(k2[pai[j]] >= 2) tmp = 1;
                if(!tmp && !Z) ok = 1;
                break;
             }
          }
          //3
          for(i = 1 ;i <= 15 ;i ++)
          {
             if(k1[pai[i]] >= 3)
             {
                if(l1 == 3) A = 1;
                int tmp = 0;
                for(j = 1 ;j < i ;j ++)
                if(k2[pai[j]] >= 3) tmp = 1;
                if(!tmp && !Z) ok = 1;
                break;
             }
          }
          //3-1
          for(i = 1 ;i <= 15 ;i ++)
          {
             if(k1[pai[i]] >= 3 && l1 >= 4)
             {
                if(l1 == 4) A = 1;
                int tmp = 0;
                for(j = 1 ;j < i ;j ++)
                if(k2[pai[j]] >= 3 && l2 >= 4) tmp = 1;
                if(!tmp && !Z) ok = 1;
                break;
             }
          }
          //3-2
          int tt1 = 0 ,tt2 = 0;
          for(i = 1 ;i <= 15 ;i ++)
          {
             if(k1[pai[i]] >= 2) tt1 ++;
             if(k2[pai[i]] >= 2) tt2 ++;
          }
             
          for(i = 1 ;i <= 15 ;i ++)
          {
             if(k1[pai[i]] >= 3 && tt1 >= 2)
             {
                if(l1 == 5) A = 1;
                int tmp = 0;
                for(j = 1 ;j < i ;j ++)
                if(k2[pai[j]] >= 3 && tt2 >= 2) tmp = 1;
                if(!tmp && !Z) ok = 1;
                break;
             }
          }     
          
          //4
          for(i = 1 ;i <= 15 ;i ++)
          {
             if(k1[pai[i]] >= 4)
             {
                if(l1 == 4) A = 1;
                int tmp = 0;
                for(j = 1 ;j < i ;j ++)
                if(k2[pai[j]] >= 4) tmp = 1;
                if(!tmp) ok = 1;
             }
          }
          //4-2
          for(i = 1 ;i <= 15 ;i ++)
          {
             if(k1[pai[i]] >= 4 && l1 >= 6)
             {
                if(l1 == 6) A = 1;
                int tmp = 0;
                for(j = 1 ;j < i ;j ++)
                if(k2[pai[j]] >= 4 && l2 >= 6) tmp = 1;
                if(!tmp && !Z) ok = 1;
                break;
             }
          }
          if(A) ok = 1;
          if(!A && XY) ok = 0;
          ok ? puts("Yes") : puts("No");
       }
       return 0;
    }
             
    

  • 相关阅读:
    CRM客户关系管理系统(十)
    CRM客户关系管理系统(九)
    CRM客户关系管理系统(八)
    CRM客户关系管理系统(七)
    CRM客户关系管理系统(六)
    5.使用Redis+Flask维护动态Cookies池
    1.数据结构--数组
    php接口安全设计浅谈
    python3 使用selenium +webdriver打开chrome失败,报错:FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver': 'chromedriver'
    4.使用Redis+Flask维护动态代理池
  • 原文地址:https://www.cnblogs.com/csnd/p/12062879.html
Copyright © 2011-2022 走看看