zoukankan      html  css  js  c++  java
  • 2014多校第六场 1010 || HDU 4930 Fighting the Landlords (模拟)

    题目链接

    题意 : 玩斗地主,出一把,只要你这一把对方要不了或者你出这一把之后手里没牌了就算你赢。

    思路 : 一开始看了第一段以为要出很多次,实际上只问了第一次你能不能赢或者能不能把牌出尽。

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <iostream>
      4 
      5 using namespace std ;
      6 
      7 char str1[20],str2[20] ;
      8 int hash1[20],hash2[20] ;
      9 
     10 int judge(char ch)
     11 {
     12     if(ch == 'T')
     13         return 10 ;
     14     else if(ch == 'J')
     15         return 11 ;
     16     else if(ch == 'Q')
     17         return 12 ;
     18     else if(ch == 'K')
     19         return 13 ;
     20     else if(ch == 'A')
     21         return 14 ;
     22     else if(ch == '2')
     23         return 15 ;
     24     else if(ch == 'X')
     25         return 16 ;
     26     else if(ch == 'Y')
     27         return 17 ;
     28     else return ch-'0' ;
     29 }
     30 int one()
     31 {
     32     int j = 0,x[25] ;
     33     for(int i = 3 ; i < 18 ; i++)
     34         if(hash1[i])
     35         {
     36             x[j++] = hash1[i] ;
     37         }
     38     if(j == 1)
     39         return 1 ;
     40     else if(j == 2)
     41     {
     42         if(hash1[16] && hash1[17]) return 1 ;
     43         if(x[0] == 3 && x[1] <= 2) return 1 ;
     44         if(x[0] <= 2 && x[1] == 3) return 1 ;
     45         if(x[0] == 4 && x[1] == 2) return 1 ;
     46         if(x[0] == 2 && x[1] == 4) return 1 ;
     47     }
     48     else if(j == 3)
     49     {
     50         if(x[1] == 1 && x[0] == 1 && x[2] == 4) return 1 ;
     51         if(x[1] == 1 && x[0] == 4 && x[2] == 1) return 1 ;
     52         if(x[1] == 4 && x[0] == 1 && x[2] == 1) return 1 ;
     53     }
     54     return 0 ;
     55 }
     56 int main()
     57 {
     58     int T ;
     59     cin >> T ;
     60     while(T--)
     61     {
     62         memset(hash1,0,sizeof(hash1)) ;
     63         memset(hash2,0,sizeof(hash2)) ;
     64         scanf("%s %s",str1,str2) ;
     65         int len1 = strlen(str1) ;
     66         int len2 = strlen(str2) ;
     67         for(int i = 0 ; i < len1 ; i++)
     68         {
     69             hash1[judge(str1[i])] ++ ;
     70         }
     71         for(int i = 0 ; i < len2 ; i++)
     72         {
     73             hash2[judge(str2[i])] ++ ;
     74         }
     75         ///如果有王炸
     76         if(hash1[16] && hash1[17])
     77         {
     78             puts("Yes") ;
     79             continue ;
     80         }
     81         ///如果手里的牌一次性能出完
     82         if(one())
     83         {
     84             puts("Yes") ;
     85             continue ;
     86         }
     87         ///如果手里牌无法一次性出完可是对方还有王炸,一定输
     88         if(hash2[16] && hash2[17])
     89         {
     90             puts("No") ;
     91             continue ;
     92         }
     93         ///如果自己有普通的炸,只要比对方大就一定赢,反之如果对方有炸自己一定输
     94         int flag = 0 ;
     95         for(int i = 17 ; i >= 3 ; i--)
     96         {
     97             if(hash1[i] == 4)
     98             {
     99                 flag = 1 ;
    100                 break ;
    101             }
    102             if(hash2[i] == 4)
    103             {
    104                 flag = -1 ;
    105                 break ;
    106             }
    107         }
    108         if(flag == 1)
    109         {
    110             puts("Yes") ;
    111             continue ;
    112         }
    113         else if(flag == -1)
    114         {
    115             puts("No") ;
    116             continue ;
    117         }
    118         ///出三张一样,可不带,可带一张,可带两张
    119         flag = 0 ;
    120         int flag1 = 0 ,flag2 = 0;
    121         for(int i = 17 ; i >= 3 ; i--)
    122         {
    123             if(hash1[i] == 3)
    124             {
    125                 flag1 = 1 ;
    126             }
    127             if(hash2[i] == 3)
    128             {
    129                 flag2 = 1 ;
    130             }
    131             if(flag1 && !flag2)
    132             {
    133                 flag = 1 ;
    134                 break ;
    135             }
    136         }
    137         if(flag)//不带
    138         {
    139             puts("Yes") ;
    140             continue ;
    141         }
    142         int a1 = 0,b1 = 0 , a2 = 0,b2 = 0 ;
    143         if(flag1 && flag2)
    144         {
    145             for(int i = 17 ; i >= 3 ; i--)
    146             {
    147                 if(hash1[i])
    148                 {
    149                     a1 = 1 ;
    150                     if(hash1[i] > 1)
    151                         b1 = 1 ;
    152                 }
    153                 if(hash2[i])
    154                 {
    155                     a2 = 1 ;
    156                     if(hash2[i] > 1)
    157                         b2 = 1;
    158                 }
    159             }
    160         }
    161         if(a1 && !a2)//带一张
    162         {
    163             puts("Yes");
    164             continue ;
    165         }
    166         if(b1 && !b2)//带两张
    167         {
    168             puts("Yes") ;
    169             continue ;
    170         }
    171         ///出一张
    172         flag = 0 ;
    173         for(int i = 17 ; i >= 0 ; i--)
    174         {
    175             if(hash1[i])
    176             {
    177                 flag = 1 ;
    178                 break ;
    179             }
    180             if(hash2[i]) break ;
    181         }
    182         if(flag)
    183         {
    184             puts("Yes") ;
    185             continue ;
    186         }
    187         ///出一对
    188         flag = 0 ;
    189         for(int i = 17 ; i >= 0 ; i--)
    190         {
    191             if(hash1[i] >= 2)
    192             {
    193                 flag = 1 ;
    194                 break ;
    195             }
    196             if(hash2[i] >= 2)
    197                 break ;
    198         }
    199         if(flag)
    200         {
    201             puts("Yes") ;
    202             continue ;
    203         }
    204         ///没有任何情况可以赢了
    205         puts("No") ;
    206     }
    207     return 0 ;
    208 }
    View Code
  • 相关阅读:
    Python驱动SAP GUI完成自动化(三)
    Python驱动SAP GUI完成自动化(选择布局+动态获取节点值)
    python中如何将货币数字转化成汉字大写金额
    python requests无法上传中文文件名的文件
    requests库结合selenium库共同完成web自动化和爬虫工作
    利用python第三方库提取PDF文件的表格内容
    pyinstaller打包exe文件闪退的解决办法
    pandas数据分析小知识点(一)
    java 终端输入小结,输入到数组、文件等(持续更新)
    Maven jenkins +Jmeter自动化测试
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3899401.html
Copyright © 2011-2022 走看看