• 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;
    }
             
    

  • 相关阅读:
    实现分享功能(分享到qq空间,新浪微博)
    AXIOS构建请求处理全局loading状态&&AXIOS避免重复请求loading多次出现
    Vue.use() 方法
    判断浏览器版本
    判断当前环境是ios还是安卓
    如何理解react中的super() super(props)
    JavaScript 函数调用时带括号和不带括号的区别
    npm 安装时 --save --dev 和 --save 区别
    npm 全局安装和局部安装的区别
    module.exports 与 exports
  • 原文地址:https://www.cnblogs.com/csnd/p/12062879.html
Copyright © 2020-2023  润新知